2012-03-12 7 views
6

Ho creato una semplice applicazione Web che esegue alcune comunicazioni tramite un server node.js utilizzando socket.io.Il socket.io riconnette la connessione di riesecuzione?

Quando un utente si connette, il nodo comunica informazioni di ritorno che indicano al client di iscriversi a determinati eventi. Funziona bene

Ma se si lascia inattivo il browser, il client si abbona agli eventi due volte. Il processo di sottoscrizione funziona così:

Quando un utente si connette node.js riceve un messaggio 'adduser'

Le due cose fondamentali che hapen in quella funzione sono questo:

socket.on('adduser', function(data) 
    <snip> 
    socket.emit('nodeinfo', {node_id: NODE_ID}); 
    socket.emit('update', {msg: 'you are connected'}); 

La presa. emit ('nodeinfo') segnala al client di iscriversi agli eventi.

Così il cliente ha

socket.on('nodeinfo', function(data) { ... } 

Il fatto è che non è mai dire 'si è connessi' due volte, nessuno dei console.log() in 'adduser' ottenere di nuovo chiamato sul lato nodo. L'unica cosa che sembra succedere è che node.js emette di nuovo nodeinfo (o così il cliente pensa) facendo sì che il client si riesegua nuovamente.

Qualcuno può spiegarmi come si ricolleghi in socket.io e come possa accadere?

risposta

4

Per impostazione predefinita, il client tenta di riconnettersi dopo una disconnessione. Questo può essere modificato se lo desideri: socket.io client

Se riconnessa, il server vedrà una nuova connessione e sta a te implementare la logica per identificare la nuova connessione con la precedente. Quindi, in pratica, invece di implementare la logica del tuo adduser sulla "connessione", fallo (o meno) dopo che il client ha inviato alcune informazioni al server.

+0

Sì. Identico al risultato, ho appena notato cosa succede con la nostra app. Grazie – Xin