2012-08-06 13 views
9

Ho un server di piccole dimensioni che esegue il framework atmosfera per un sistema di notifica in tempo reale tramite websocket.Errore di connessione Websocket su Amazon ec2

Il sistema funziona perfettamente sul mio computer locale, ma quando lo distribuisco su EC2, non sembra funzionare. Sono in grado di telnet al server Netty remoto però. Il server è accessibile e le porte sono aperte su EC2

Firefox lancia il seguente errore

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). 

Il server non ha nemmeno ottenere una richiesta, questo mi porta a pensare che questo è un po 'EC2 prese web Gotcha che ho non ne sono a conoscenza.

+2

Avete configurato il firewall in modo che 2880 sia aperto? – Veebs

risposta

0

Con nc (riga di comando linux/OSX) è possibile controllare facilmente se le porte sono funzionanti.

nc -z www.google.com 80 

In caso contrario, controllare i gruppi di sicurezza. Login su EC2:

Lasciato in NETWORK & SECURITY: Seleziona Security Groups -> open default -> inbound. Lì puoi creare nuove regole.

6

Stai utilizzando un ELB? In caso affermativo, è necessario passare a TPC anziché a HTTP in quanto Websockets non è supportato nel livello HTTP. Perderai la vischiosità e la possibilità di recuperare l'IP del client durante l'esecuzione di TCP, ma Websockets funzionerà fino in fondo. =)

Maggiori informazioni su 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

2

Ho ricevuto lo stesso problema in PHP. La soluzione è: creare websocket usando il proprio indirizzo IP privato di EC2. e collegare che websocket utilizzando il tuo indirizzo IP pubblico EC2 o URL con porta socket web

si otterrà risposta da presa web EC2

+0

Come fare? Sto usando Python + Tornado. Funziona bene nella macchina locale ma non in Ubuntu EC2. – lonelyloner

0

@ABIRAMAN mi ha fatto la più vicina.

ero stato il collegamento al websocket (HapiJS/NES) con localhost in questo modo:

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

Modifica al pubblico AWS IP come di seguito e funziona:

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

Nota che ho anche permesso 3000 su 127.0.0.1 e 0.0.0.0/0 nel pannello di controllo di EC2 di Amazon. Inoltre, 5.5.5.5 non è l'IP che Amazon mi ha dato;)