2013-04-25 15 views
6

Mam tę aplikację napisaną z expressem i socket.io przy użyciu node.js, aplikacja działa znakomicie na localhost, ale kiedy pcham na mój serwer ec2, łączy się przez 20 sekund, a następnie rozłącza się, a następnie łączy ponownie itd. ..błąd "błąd połączenia websocket" przy użyciu pliku socket.io na instancji EC2?

dając mi błąd na konsoli węzła jako

warn - websocket connection invalid 
info - transport end 

SERWERZE

app = express() 
server = http.createServer(app) 
io = require('socket.io').listen(server) 

KLIENTA

socket = io.connect() 

wiem, że problem nie jest z mojego kodu, bo w pełni przetestowane aplikację internetową na localhost, więc jedynym problemem jest to, gdzie ten kod jest uruchomiony, który jest moim instancji EC2?

+0

pan podłączyć do instancji bezpośrednio lub za pośrednictwem ELB? –

+0

Podłączam się bezpośrednio do instancji? – unknown

+0

może ktoś odpowiedzieć na to pytanie, to naprawdę podsłuchuje mnie sirycznie! – unknown

Odpowiedz

2

Upewnij się, że korzystasz z najnowszej wersji węzła, express i socket.io na swoim ec2. Podaj także dane o aktualnie używanych wersjach zarówno na komputerze lokalnym, jak i na instancji EC2.

1

Działając na lokalnym komputerze, nie musisz radzić sobie z opóźnieniami sieci, problemami z NAT i zaporami ogniowymi. Działając na EC2 masz wszystkie te.

Gniazda sieciowe są stosunkowo nowe i niestabilne. Zacznij więc od upewnienia się, że używasz najnowszych wersji (i daj nam znać, jakie one są). Być może wersja pliku socket.io zainstalowanego na komputerze lokalnym różni się od wersji zainstalowanej na serwerze EC2.

4

Może być wiele możliwych przyczyn można dostać ten błąd:

  1. Używasz przeglądarki, która częściowo lub nie obsługuje WebSockets. Możesz sprawdzić, czy Twoja przeglądarka obsługuje gniazda internetowe here.
  2. Korzystanie z proxy, które nie obsługuje websocket. Jeśli istnieje jakiś serwer (load balancer) między klientem a serwerem węzła, który nie obsługuje websocket.
  3. Używasz wersji socket.io 0.9.1/0.9.1-1. To zachowanie jest zgłaszane jako bug dla tej wersji. Więc uaktualnij do najnowszej wersji socket.io, która jest 0.9.14.
  4. Łączność z przeglądarką jest zapora/zablokowana.
  5. Problem związany z kodem.
1

Jeśli podczas tych 20 sekund przed utratą połączenia nie zostanie wykonana żadna aktywność, jedną z możliwości jest ustawienie zbyt niskiego poziomu podtrzymania.

Aby uzyskać podobny problem, należy zapoznać się z artykułem https://groups.google.com/forum/?fromgroups=#!topic/socket_io/RUv70BguZ-U. Rozwiązaniem było użycie pulsu, aby utrzymać połączenie otwarte.

Nieco więcej na socket.io pulsem jeśli nie już je za pomocą: Advantage/disadvantage of using socketio heartbeats

Powiązane problemy