2013-04-25 2 views
6

Ho questa web app scritta con express e socket.io usando node.js, l'app funziona brillantemente su localhost, ma quando spingo al mio server ec2, si connette per 20 secondi, poi si disconnette, quindi si connette di nuovo ecc. ..ottenendo un errore "websocket connection valid" usando socket.io su un'istanza ec2?

dandomi l'errore sulla console nodo come

warn - websocket connection invalid 
info - transport end 

SERVER

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

CLIENT

socket = io.connect() 

So che il problema non è con il mio codice, perché ho completamente testato l'applicazione web sul localhost, quindi l'unico problema è dove questo codice è in esecuzione, che è la mia istanza EC2?

+0

effettuata la connessione con l'istanza, direttamente o tramite un ELB? –

+0

mi collego direttamente all'istanza? – unknown

+0

qualcuno può rispondere a questa domanda, mi disturba davvero in modo sordido! – unknown

risposta

2

Assicurati di utilizzare le versioni più recenti di node, express e socket.io su ec2. Inoltre, fornire alcuni dati sulle versioni attualmente utilizzate sia sul proprio computer locale che sull'istanza di ec2.

1

In esecuzione sul computer locale non è necessario gestire la latenza di rete, i problemi NAT o i firewall. In esecuzione su EC2 hai tutti questi.

I socket Web sono relativamente nuovi e instabili. Quindi per cominciare assicurati di eseguire le ultime versioni (e facci sapere quali sono). Forse la versione di socket.io installata sul computer locale è diversa dalla versione installata nel tuo server EC2.

4

Ci potrebbero essere molte ragioni possibili è possibile ottenere questo errore:

  1. Si utilizza browser parzialmente o non supporta WebSockets. Puoi verificare se il tuo browser supporta le websocket here.
  2. Utilizzo del proxy che non supporta websocket. Se è presente un server (bilanciamento del carico) tra il client e il server nodo che non supporta websocket.
  3. Si sta utilizzando socket.io versione 0.9.1/0.9.1-1. Questo comportamento è un segnalato bug per questa versione. Quindi aggiorna l'ultima versione di socket.io che è 0.9.14.
  4. La connettività del browser è protetta/bloccata.
  5. Problema relativo al codice.
1

Se non ci sono attività durante questi 20 secondi prima di perdere la connessione, una possibilità è che keep-alive sia impostato su un valore troppo basso.

Vedere https://groups.google.com/forum/?fromgroups=#!topic/socket_io/RUv70BguZ-U per un problema simile. La soluzione era usare il battito cardiaco per mantenere aperta la connessione.

Un po 'più su socket.io battiti cardiaci se non siete già li utilizza: Advantage/disadvantage of using socketio heartbeats