2012-08-06 13 views
9

Tengo un servidor netty que ejecuta el entorno de atmósfera para un sistema de notificación en tiempo real sobre websockets.Error de conexión de Websockets en Amazon ec2

El sistema funciona perfectamente en mi máquina local, pero cuando lo despliego en EC2, parece que no funciona. Sin embargo, puedo hacer telnet al servidor Netty remoto. El servidor es accesible y puertos están abiertos en EC2

Firefox lanza el siguiente error

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

el servidor ni siquiera obtener una solicitud, esto me lleva a pensar que se trata de algún EC2 Web Sockets Gotcha cual no estoy enterado de.

+2

¿Tiene la configuración de los firewalls para que 2880 esté abierto? – Veebs

Respuesta

0

Con nc (commandline linux/OSX) puede verificar fácilmente si sus puertos están en funcionamiento.

nc -z www.google.com 80 

De lo contrario, verifique sus grupos de seguridad. Iniciar sesión en EC2:

Izquierda en RED & SEGURIDAD: Seleccionar grupos de seguridad -> abrir por defecto -> entrantes. Ahí puedes crear nuevas reglas.

6

¿Está utilizando un ELB? En caso afirmativo, deberá cambiar a TPC en lugar de HTTP, ya que Websockets no es compatible con la capa HTTP. Perderá adherencia y la posibilidad de recuperar el IP del cliente cuando se ejecuta TCP, pero Websockets funcionará completamente. =)

Más información sobre 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

Tengo este mismo problema en php. La solución es: crear websocket con su dirección IP privada de EC2. y conectar ese WebSocket utilizando su dirección IP pública EC2 o URL con el puerto websocket

obtendrá respuesta de websocket EC2

+0

¿Cómo hacerlo? Estoy usando Python + Tornado. Funciona bien en la máquina local, pero no en EC2 Ubuntu. – lonelyloner

0

@ABIRAMAN me consiguió el más cercano.

que había estado conectando con el WebSocket (HapiJS/NES) con localhost así:

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

El cambio a la IP AWS pública que a continuación y funciona:

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

Tenga en cuenta que también permití 3000 en 127.0.0.1 y 0.0.0.0/0 en el panel de control EC2 de Amazon. Además, 5.5.5.5 no es la IP que Amazon me dio;)