簡體   English   中英

如何將Node.js WebSocket服務器部署到Amazon Elastic Beanstalk?

[英]How to deploy a Node.js WebSocket server to Amazon Elastic Beanstalk?

使用Elastic Beanstalk Web控制台,我啟動了一個新的Web Server 1.0環境,該環境具有:

  • 預定義的配置:Node.js,64位Amazon Linux 2014.09 v1.0.9
  • 環境類型:負載均衡,自動擴展

並將Proxy Server設置為none

我已經成功通過控制台壓縮並上傳了我的代碼:

的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目錄(如果尚不存在)
  • 在其中創建一個文件,我稱為mine 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM