2015-12-03 5 views
7

Sto cercando di reconnecct alla presa dopo l'evento di disconnessione è sparato con la stessa socket.id ecco la mia presa di configurazionepresa Reconnect in caso di disconnessione

var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var connect_clients = [] //here would be the list of socket.id of connected users 
http.listen(3000, function() { 
    console.log('listening on *:3000'); 
}); 

Così in caso di disconnessione voglio ricollegare l'utente disconnesso con stesso socket.id se possibile

socket.on('disconnect',function(){ 
var disconnect_id = socket.id; //i want reconnect the users here 
}); 
+0

Sembra che tu stia partendo dal presupposto che un 'socket.id' identificherà in modo univoco _user_ invece di _connection_. Il server [genererà un nuovo id per ciascuna connessione] (https://github.com/socketio/engine.io/blob/ec673d11f162801b833a516526c1e36fa38f81b6/lib/server.js#L262) e non è possibile sovrascriverlo. – robertklep

+0

ok se lo stesso socket.id non può essere ricollegato voglio ricollegarli con il nuovo ID di socket generato quindi –

+0

Il predefinito per 'socket.io-client' _is_ per riconnettersi automaticamente (documentato [qui] (http://socket.io/ docs/client-api/# manager (url: string, -opts: object)), l'opzione 'riconnessione'). – robertklep

risposta

6

per impostazione predefinita, Socket.IO non ha un lato server logica per la riconnessione. Il che significa che ogni volta che un client vuole connettersi, viene creato un nuovo oggetto socket, quindi ha un nuovo id. Spetta a te implementare la riconnessione.

Per fare ciò, è necessario un modo per memorizzare qualcosa per questo utente. Se si dispone di qualsiasi tipo di autenticazione (passaporto per esempio) - utilizzando socket.request si avrà la richiesta HTTP iniziale attivata prima dell'aggiornamento. Quindi da lì, puoi avere tutti i tipi di cookie e dati già memorizzati.

Se non si desidera memorizzare nulla nei cookie, la cosa più semplice da fare è inviare al client informazioni specifiche su se stesso, alla connessione. Quindi, quando l'utente prova a riconnettersi, invia nuovamente queste informazioni. Qualcosa di simile:

var client2socket = {}; 
io.on('connect', function(socket) { 
    var uid = Math.random(); // some really unique id :) 
    client2socket[uid] = socket; 

    socket.on('authenticate', function(userID) { 
     delete client2socket[uid]; // remove the "new" socket 
     client2socket[userID] = socket; // replace "old" socket 
    }); 
}); 

Tenete a mente questo è solo un esempio e avete bisogno di implementare qualcosa di un po 'meglio :) Forse inviare le informazioni come una richiesta param, o conservare in un altro modo - quello che funziona per voi.

+0

come nel client api fornisce un numero di opzioni per la riconciliazione ma non ero in grado di usarlo a causa della scarsa documentazione di esso, quindi potresti aiutarmi? –

+0

Uhhh, anche socket.io ha una logica per la riconnessione, quindi il tuo primo paragrafo sembra completamente sbagliato. – jfriend00

+0

Il mio male, volevo dire ** logica lato-lato **. Grazie per segnalarlo! –

Problemi correlati