Est-il possible de déconnecter un client avec SocketIO et de fermer littéralement la connexion? Donc, si quelqu'un est connecté à mon serveur et que je souhaite fermer la connexion entre eux et mon serveur, comment procéder pour le faire?
Edit: c'est maintenant possible
Vous pouvez maintenant appeler simplement socket.disconnect()
sur le serveur .
Ma réponse initiale:
Ce n'est pas encore possible.
Si vous en avez également besoin, votez/commentez cette question .
socket.disconnect()
ne peut être utilisé que du côté client, pas du côté serveur.
Client.emit('disconnect')
déclenche l'événement de déconnexion sur le serveur, mais ne déconnecte pas efficacement le client. Le client n'est pas au courant de la déconnexion.
La question demeure donc: comment forcer un client à se déconnecter du serveur?
Une raison pour laquelle vous ne pouvez pas demander au serveur d’émettre un message au client lui demandant d’appeler la fonction de déconnexion?
Sur le client:
socket.emit('forceDisconnect');
Sur le serveur:
socket.on('forceDisconnect', function(){
socket.disconnect();
});
En supposant que la socket nommée de votre socket, utilisez:
socket.disconnect()
Pour ceux qui ont trouvé cela sur Google - il existe une solution pour cela maintenant:
Socket.disconnect()
donne le coup de pied au client (côté serveur). Aucune chance pour le client de rester connecté :)
Dans mon cas, je voulais détruire la connexion sous-jacente, auquel cas je devais appeler socket.disconnect(true)
, comme vous pouvez le constater, à partir de source ici
En vérifiant ce matin, il semble qu'il soit maintenant:
socket.close()
client._onDisconnect()
devrait fonctionner
Ceci n'a pas fonctionné pour moi:
`socket.disconnect()`
Ceci a fonctionné pour moi:
socket.disconnect(true)
La remise de true
fermera la connexion sous-jacente au client et pas uniquement à l'espace de noms auquel le client est connecté Socket IO Documentation .
Exemple d'utilisation: le client s'est connecté à un serveur de socket Web avec un jeton d'accès non valide (jeton d'accès transféré au serveur de socket Web avec des paramètres de connexion). Le serveur de socket Web informe le client qu'il va fermer la connexion, en raison de son jeton d'accès non valide:
// (1) the server code emits
socket.emit('invalidAccessToken', function(data) {
console.log(data); // (4) server receives 'invalidAccessTokenEmitReceived' from client
socket.disconnect(true); // (5) force disconnect client
});
// (2) the client code listens to event
// client.on('invalidAccessToken', (name, fn) => {
// // (3) the client ack emits to server
// fn('invalidAccessTokenEmitReceived');
// });
Socket.io utilise le modèle EventEmitter pour déconnecter/connecter/vérifier les pulsations afin que vous puissiez le faire. Client.emit('disconnect');
J'utilise client.emit('disconnect')
+ client.removeAllListeners()
pour le client connecté pour ignorer tous les événements après la déconnexion
utilisation :
socket.Disconnect () // ok
ne pas utiliser :
socket.disconnect ()
J'utilise côté client socket.disconnect();
client.emit('disconnect') didnt work for me