[英]How to deploy a Node.js WebSocket server to Amazon Elastic Beanstalk?
使用Elastic Beanstalk Web控制台,我啟動了一個新的Web Server 1.0環境,該環境具有:
我已經成功通過控制台壓縮並上傳了我的代碼:
的package.json
{
"name": "cool",
"version": "0.0.0",
"dependencies": {
"ws": "0.4.x"
}
}
server.js
var wss = new (require('ws')).Server({port: (process.env.PORT || 3000)})
wss.on('connection', function(ws) {
console.log('connected')
ws.on('message', function(message) {
console.log(message)
ws.send(message)
});
ws.on('close', function() {
console.log('disconnected')
})
})
我還嘗試包括node_modules
目錄。
運行后:
wscat -c ws://default-environment-xxxxxxxxxx.elasticbeatalk.com/
我回來了:
Error: unexpected server response (200)
如何找到有關該錯誤的更多信息?
Amazon將PORT環境變量設置為8080。因此,我也嘗試過:
wscat -c ws://default-environment-xxxxxxxxxx.elasticbeatalk.com:8080/
但是,這只是掛起然后返回:
Error: connect ETIMEDOUT
另外,當我確實建立WebSocket連接時,我希望服務器允許它無限期保持打開狀態,這與Heroku的WebSocket實現不同,后者在60秒后超時。
是否有關於如何執行此操作的詳細教程?
如果您已正確設置package.json
文件(主要是在npm install
時使用--save
),則不必包含node_modules目錄。
檢查process.env.PORT
設置是否未更改偵聽端口-AWS EB通常將端口設置為8081。
要查找報告的端口,可以在代碼中添加console.log(process.env.PORT)
,然后通過ssh連接到服務器並運行tail -f var/log/nodejs/nodejs.log
(此程序監視日志) node.js的輸出)。 然后再次打您的服務器,看看ssh連接的日志輸出中顯示了哪個端口。
要調查您遇到的錯誤,請添加ws.on('error',...)
函數並記錄所需的內容。
好了,經過一番搜索之后,我找到了一種解決方案,該解決方案無需更改ELB的任何內容,也無需將代理設置為none(我使用nginx)。
您需要的是:
.ebextensions
目錄(如果尚不存在) 01_nginx.config
在此文件中,輸入以下代碼:container_commands:
01_nginx_websockets: command: | sed -i '/\\s*proxy_set_header\\s*Connection/c \\ proxy_read_timeout 36000s; \\ proxy_set_header Upgrade $http_upgrade; \\ proxy_set_header Connection "upgrade"; \\ ' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
將您的代碼部署到彈性beantalk並享受websocket的連接!
PS:您實際上並不需要proxy_read_timeout
屬性集,我只是將其用於自己的屬性。 另外,它似乎並沒有太大作用,我會繼續尋找。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.