2014-07-18 27 views
3

我開發了我們的野蠅websocket項目。當我們在localhost或本地網絡中測試它時,一切正常。但是當我將它部署在AWS上時,websocket不再工作。我們可以訪問其他html頁面。但是當我們認同「ws:// ip/project location」時,chrome只是說手抖動錯誤。我也經歷過與jelastic託管相同的網絡套接字問題。我的問題是爲什麼websocket不能在雲上工作?

  1. 爲什麼它會發生這樣的事情?
  2. websocket協議是否不夠穩定?
  3. 在java中有沒有任何適合的websocket項目託管?
+0

Websockets是服務器運行的操作系統以及瀏覽器的問題。如果您在較舊的服務器上運行您的網站(我相信AWS會提供較舊的和較新的),這可以解釋它。當我說「年紀大了」時,我的意思是年齡不大。就Windows而言,我認爲Server 2008 R2甚至不支持它們。 –

+0

我們使用的是Ubuntu 12.04.4 LTS。我認爲它支持websocket。 – FranXho

+0

Websockets應該在任何操作系統中運行,它只是一個套接字服務,沒什麼特別的。在Windows中,您可以使用第三方websocket服務。 – vtortola

回答

1

到目前爲止平衡器不會轉發websocket標頭。要使WS工作,您必須擁有公共IP地址,並且在您的應用程序前沒有其他服務。

1

我建議您嘗試部署到雲提供商:Heroku - 使用node.js和websockets的示例應用程序代碼將幫助您快速啓動並運行。它使用特定端口本地運行的應用程序的WebSocket - 說8888將在Heroku上運行的罰款:

var port = process.env.PORT || 8888; 

同Heroku內部將部署與運行時您的應用程序生成的端口通過PORT可見。 如果您正在使用使用WebSockets的node.js我建議使用einaros WS實現

var WebSocketServer = require("ws").Server; 

其無縫地處理WS端口的航班嗎概念HTTP端口

1

目前ELB不支持的WebSocket在HTTP模式。爲了能夠處理WebSocket,你需要以tcp模式配置ELB(tcp連接的有效載荷將直接發送到服務器,所以ELB不會影響http和ws流)。有了這個設置,你將無法看到來電IP。如果沒有ELB Websocket完美工作(AWS只能看到ip流量,而操作系統只有tcp一個),我們並沒有改變任何一個普通的舊的http服務器來使用WS(WS處理代碼除外)網絡服務器)。

要知道您是否在使用ELB查看賬單,AWS可以爲您提供許多非常有趣的服務,但需要收費。

+0

非常感謝。我相信這是我的問題來源。 – FranXho

相關問題