web-dev-qa-db-fra.com

Comment détecter les déconnexions sur socket.io?

J'utilise socket.io dans mon projet. J'ai activé la fonction de reconnexion. Je souhaite que si l'utilisateur se déconnecte du serveur afficher une alerte (Votre perte de connexion Internet. Essayez de vous reconnecter). Et si l'utilisateur se reconnecte à nouveau, je souhaite afficher une alerte supplémentaire (ne vous inquiétez pas, vous êtes connecté).

Comment puis-je le faire?

14
user2997295

Détecter sur le client que vous utilisez

  // CLIENT CODE
  socket.on('disconnect', function(){
      // Do stuff (probably some jQuery)
  });

C'est exactement le même code que ci-dessus pour un serveur node.js.

Si, pour une raison quelconque, vous souhaitez détecter un utilisateur en train de se déconnecter et l'afficher aux autres, vous devez utiliser le serveur 1 pour détecter la personne qui part, puis renvoyer un message aux autres en utilisant quelque chose comme:

socket.on('disconnect', function(){
    socket.broadcast.to(roomName).emit('user_leave', {user_name: "johnjoe123"});
});

J'espère que cela t'aides

19
roryhughes

socket.io a un événement disconnect, placez-le dans votre bloc connect:

socket.on('disconnect', function () {
    //do stuff
});
9
tymeJV

J'ai traité ce problème de cette façon. J'ai créé un émetteur sur le client qui appelle Heartbeat sur le serveur.

socket.on('heartbeat', function() {
        // console.log('heartbeat called!');
        hbeat[socket.id] = Date.now();
        setTimeout(function() {
            var now = Date.now();
            if (now - hbeat[socket.id] > 5000) {
                console.log('this socket id will be closed ' + socket.id);
                if (addedUser) {
                    --onlineUsers;
                    removeFromLobby(socket.id);

                    try {
                        // this is the most important part
                        io.sockets.connected[socket.id].disconnect();
                    } catch (error) {
                        console.log(error)
                    }
                }
            }
            now = null;
        }, 6000);
    });

J'ai trouvé cette fonction de code à appeler:

io.sockets.connected[socket.id].disconnect();
1
InvincibleTrain