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.
fonte
2015-12-03 15:42:39
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
ok se lo stesso socket.id non può essere ricollegato voglio ricollegarli con il nuovo ID di socket generato quindi –
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