2012-08-06 40 views
9

我有一個netty服務器通過websockets爲實時通知系統運行氣氛框架。亞馬遜EC2上的Websockets連接失敗

該系統在我的本地機器上完美工作,但是當我在EC2上部署它時,它似乎不起作用。雖然我可以遠程登錄遠程Netty服務器。該服務器是可以訪問的端口都在EC2開放

火狐引發以下錯誤

Using URL: ws://beta.myapp.com:2880/myhandle?id=1&name=Chinese_food_rule_2& X-Atmosphere-tracking-id=35490c47-59d6-abf6-36fa-431aa340d90a&X-Atmosphere-Framework=0.9&X-Atmosphere-Transport=websocket&X-Cache-Date=0&Content-Type=application/json 

Websocket error, reason: undefined 

Firefox can't establish a connection to the server at ws://beta.myapp.com:2880/myhandle?id=1&name=Chinese_food_rule_2&X-Atmosphere-tracking-id=35490c47-59d6-abf6-36fa-431aa340d90a&X-Atmosphere-Framework=0.9&X-Atmosphere-Transport=websocket&X-Cache-Date=0&Content-Type=application/json. 

Websocket closed, reason: Connection was closed abnormally (that is, with no close frame being sent). 

服務器甚至沒有得到一個請求,這使我認爲,這是一些EC2網絡插座疑難雜症,我我不知道。

+2

你有沒有設置防火牆,讓2880打開? – Veebs 2012-08-06 23:17:36

回答

0

使用nc(命令行linux/OSX),您可以輕鬆檢查您的端口是否啓動並運行。如果不是,請檢查您的安全組。在EC2上登錄:

左下網絡&安全: 選擇安全組 - >打開默認 - >入站。你可以創建新的規則。

6

您使用的是ELB嗎?如果是,則需要切換到TPC而不是HTTP,因爲HTTP層不支持WebSockets。運行TCP時,您將失去粘性並可能檢索客戶端IP,但Websockets將一直運行。 =)上EC2/ELB /的WebSockets

的更多信息:
http://johan.firebase.co/post/31047804966/the-state-of-websockets-ssl-and-sticky-sessions-in
http://johan.heapsource.com/post/31047804966/the-state-of-websockets-ssl-and-sticky-sessions-in

+2

http://johan.heapsource.com/post/31047804966/the-state-of-websockets-ssl-and-sticky-sessions-in – bendytree 2014-02-05 20:12:44

2

我在php中得到了同樣的問題。 解決方案是:使用您的私有IP地址EC2創建websocket。和使用EC2公共IP地址或URL與網絡插座端口連接的是WebSocket的

你會得到EC2網絡插座響應

+0

如何做到這一點?我正在使用Python + Tornado。它在本地機器上運行良好,但不在EC2 Ubuntu中。 – lonelyloner 2016-02-11 15:52:05

0

@ABIRAMAN讓我最接近的一次。

我已經連接到的WebSocket(HapiJS/NES)與本地主機像這樣:

const client = new Nes.Client('ws://localhost:3000')

改變公衆AWS IP如下,它的工作原理:

const client = new Nes.Client('ws://5.5.5.5:3000')

請注意,我還允許在Amazon的EC2控制面板的127.0.0.1和0.0.0.0/0上使用3000。另外,5.5.5。5不是亞馬遜給我的IP;)