Comment se reconnecter au socket io une fois que disconnect
a été appelé?
Voici le code
function initSocket(__bool){
if(__bool == true){
socket = io.connect('http://xxx.xxx.xxx.xxx:8081', {secure:false});
socket.on('connect', function(){console.log('connected')});
socket.on('disconnect', function (){console.log('disconnected')});
}else{
socket.disconnect();
socket = null;
}
}
Si je fais initSocket(true)
, cela fonctionne. Si je fais initSocket(false)
, il se déconnecte. MAIS ALORS si j'essaye de me reconnecter en utilisant initSocket(true)
, la connexion ne fonctionne plus. Comment puis-je faire fonctionner la connexion?
Eh bien, vous avez une option ici ...
La première fois que vous initialisez la valeur de socket, vous devez vous connecter avec io.connect
,
La prochaine fois (après avoir appelé une fois déconnecté), vous devez vous reconnecter avec socket.socket.connect()
.
Donc, votre initSocket
, devrait être quelque chose comme
function initSocket(__bool){
if(__bool){
if ( !socket ) {
socket = io.connect('http://xxx.xxx.xxx.xxx:8081', {secure:false});
socket.on('connect', function(){console.log('connected')});
socket.on('disconnect', function (){console.log('disconnected')});
} else {
socket.socket.connect(); // Yep, socket.socket ( 2 times )
}
}else{
socket.disconnect();
// socket = null; <<< We don't need this anymore
}
}
Je sais que vous avez déjà une réponse, mais je suis arrivé ici parce que la fonctionnalité de reconnexion du client socket.IO est actuellement interrompue dans le nœud.
Les bogues actifs sur le dépôt github montrent que beaucoup de gens ne reçoivent pas d'événements en cas d'échec de connexion et que la reconnexion ne se produit pas automatiquement.
Pour contourner ce problème, vous pouvez créer une boucle de reconnexion manuelle comme suit:
var socketClient = socketioClient.connect(socketHost)
var tryReconnect = function(){
if (socketClient.socket.connected === false &&
socketClient.socket.connecting === false) {
// use a connect() or reconnect() here if you want
socketClient.socket.connect()
}
}
var intervalID = setInterval(tryReconnect, 2000)
socketClient.on('connect', function () {
// once client connects, clear the reconnection interval function
clearInterval(intervalID)
//... do other stuff
})
Vous pouvez vous reconnecter en suivant la configuration côté client.
// 0.9 socket.io version
io.connect(SERVER_IP,{'force new connection':true });
// 1.0 socket.io version
io.connect(SERVER_IP,{'forceNew':true });
C'est une vieille question, mais je me débattais avec cela récemment et je suis tombé ici. Les versions les plus récentes de socket.io (> 2.0) n'ont plus la propriété socket.socket
Comme indiqué ici .
J'utilise socket.io-client 2.2.0
Et je faisais face à une situation où le socket semble être connecté (propriété socket.connected = true
) Mais il ne communiquait pas avec le serveur.
Donc, pour résoudre ce problème, ma solution était d'appeler socket.close()
et socket.open
. Ces commandes forcent une déconnexion et une nouvelle connexion.
J'ai eu un problème avec la reconnexion socket-io. Peut-être que ce cas aidera quelqu'un. J'avais du code comme ça:
var io = require('socket.io').listen(8080);
DB.connect(function () {
io.sockets.on('connection', function (socket) {
initSockets(socket);
});
});
c'est faux, car il y a un délai entre les rappels attribués au port ouvert. Certains messages peuvent être perdus avant l'initialisation de DB. La bonne façon de le réparer est:
var io = null;
DB.connect(function () {
io = require('socket.io').listen(8080);
io.sockets.on('connection', function (socket) {
console.log("On connection");
initSockets(socket);
});
});