2012-08-06 21 views
9

Mam serwer Netty z architekturą atmosfery dla systemu powiadamiania w czasie rzeczywistym przez websockets.Awaria połączenia internetowego w amazon ec2

System działa idealnie na moim komputerze lokalnym, ale kiedy wdrażam go na EC2, to po prostu nie działa. Mogę jednak telnetować się na zdalny serwer Netty. Serwer jest dostępny i porty są otwarte na EC2

Firefox wyrzuca następujący błąd

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

Serwer nie dostać nawet wniosek, to prowadzi mnie do myślenia, że ​​to jest jakiś EC2 gniazd internetowych haczyka które nie jestem tego świadomy.

+2

Czy masz konfigurację firewalla, aby 2880 było otwarte? – Veebs

Odpowiedz

0

Z nc (linux/OSX) można łatwo sprawdzić, czy porty są uruchomione.

nc -z www.google.com 80 

Jeśli nie, sprawdź grupy zabezpieczeń. Zaloguj się do EC2:

Po lewej pod NETWORK & BEZPIECZEŃSTWO: Wybierz Grupy zabezpieczeń -> otwórz domyślne -> Przychodzące. Tam możesz tworzyć nowe reguły.

6

Czy używasz ELB? Jeśli tak, musisz przełączyć się na TPC zamiast HTTP, ponieważ websockets nie jest obsługiwane w warstwie HTTP. Stracisz lepkość i możliwość odzyskania IP klienta podczas uruchamiania TCP, ale Websockets będzie działać przez cały czas. =)

Więcej informacji na 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-websockets-ssl-and-sticky-sessions-in – bendytree

2

Mam ten sam problem w php. Rozwiązaniem jest: utwórz websocket używając prywatnego adresu IP EC2. i połączyć za pomocą tego websocket EC2 publiczny adres IP lub URL z internetowej portu gniazda

dostaniesz odpowiedź z websocket EC2

+0

Jak to zrobić? Używam Python + Tornado. Działa dobrze w lokalnej maszynie, ale nie w EC2 Ubuntu. – lonelyloner

0

@ABIRAMAN załatwił mi najbliższa.

byłem podłączenia do websocket (HapiJS/NES) z localhost tak:

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

Zmiana do publicznej AWS IP jak poniżej i działa:

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

Zauważ, że w panelu kontrolnym EC2 Amazona mogłem również 3000 w wersji 127.0.0.1 i 0.0.0.0/0. Ponadto 5.5.5.5 to nie jest IP, które dałem Amazon;)