2012-08-06 17 views
9

Ich habe einen Netty-Server, der das Atmosphären-Framework für ein Echtzeit-Benachrichtigungssystem über Websockets ausführt.WebSockets Verbindungsfehler amazon ec2

Das System funktioniert perfekt auf meinem lokalen Computer, aber wenn ich es auf EC2 bereitstellen, scheint es einfach nicht zu funktionieren. Ich bin jedoch in der Lage, auf den entfernten Netty-Server telnet. Der Server ist zugänglich und Ports offen sind auf EC2

Firefox den folgenden Fehler wirft

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

Der Server selbst eine Anfrage nicht erhalten, dies führt mich zu denken, dass dies einige EC2 Web Sockets Gotcha, die ich bin mir dessen nicht bewusst.

+2

Haben Sie Ihre Firewalls so eingerichtet, dass 2880 geöffnet ist? – Veebs

Antwort

0

Mit nc (Kommandozeile linux/OSX) können Sie einfach überprüfen, ob Ihre Ports laufen.

nc -z www.google.com 80 

Wenn nicht, dann überprüfen Sie die Sicherheitsgruppen. Login on EC2:

Links unter NETZWERK & SICHERHEIT: Wählen Sie Sicherheitsgruppen -> Standard -> Inbound. Dort können Sie neue Regeln erstellen.

6

Verwenden Sie einen ELB? Wenn ja, müssen Sie zu TPC anstelle von HTTP wechseln, da websockets in der HTTP-Schicht nicht unterstützt wird. Sie verlieren die Klebrigkeit und die Möglichkeit, Client-IP beim Ausführen von TCP abzurufen, aber Websockets wird den ganzen Weg arbeiten. =)

Mehr Informationen über 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

Ich habe das gleiche Problem in PHP. Die Lösung ist: Erstellen Sie Websocket mit Ihrer privaten IP-Adresse von EC2. und verbindet diese websocket mit Ihrer EC2 öffentlichen IP-Adresse oder URL mit Web-Socket-Port

Sie Antwort von EC2 Web-Buchse

+0

Wie geht das? Ich benutze Python + Tornado. Es funktioniert gut in der lokalen Maschine, aber nicht in EC2 Ubuntu. – lonelyloner

0

@ABIRAMAN hat mich in der Nähe bekommen.

ich zum websocket hatte wie so mit localhost (HapiJS/NES) verbindet:

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

der Öffentlichkeit AWS IP ändern, wie unten und es funktioniert:

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

Beachten Sie, dass ich auch 3000 auf 127.0.0.1 und 0.0.0.0/0 in Amazon EC2 Systemsteuerung erlaubt. 5.5.5.5 ist nicht die IP Amazon gab mir;)