Existe-t-il un moyen 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 lui et mon serveur, comment procéder?
Existe-t-il un moyen 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 lui et mon serveur, comment procéder?
Réponses:
Edit: c'est désormais possible
Vous pouvez maintenant simplement appeler socket.disconnect()côté serveur .
Ma réponse originale:
Ce n'est pas encore possible.
Si vous en avez également besoin, votez / commentez cette question .
iptables), plus vous économiserez de ressources. Dans la plupart des cas, le simple fait de donner un coup de pied au client devrait être suffisant, puisque socketio ne se connecte pas aussi rapidement, et si quelqu'un veut vraiment vous faire du DoS, il a quand même d'autres moyens (par exemple, télécharger des pages de votre part).
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'a pas connaissance de la déconnexion.
La question demeure donc: comment forcer un client à se déconnecter du côté serveur?
Client.emit('disconnect')manuellement avec les versions récentes de socket.io, il y a maintenant un côté serveur socket.disconnect()(voir ma réponse).
socket.disconnect()peut également être utilisé côté serveur.
disconnect()fonction terminée?
Une raison pour laquelle vous ne pouvez pas faire en sorte que le serveur émette un message au client qui lui fait appeler la fonction de déconnexion?
Sur le client:
socket.emit('forceDisconnect');
Sur le serveur:
socket.on('forceDisconnect', function(){
socket.disconnect();
});
En supposant que le socket nommé de votre socket, utilisez:
socket.disconnect()
Pour ceux qui ont trouvé cela sur google, il existe une solution pour cela en ce moment:
Socket.disconnect()lance le client (côté serveur). Aucune chance pour le client de rester connecté :)
disconnectévénement du socket pour savoir s'il s'est déconnecté. Peut aussi être l' closeévénement, je ne suis pas sûr. Consultez la documentation de socket.io pour plus d'informations à ce sujet.
En vérifiant ce matin, il semble que c'est maintenant:
socket.close()
Dans mon cas, je voulais démanteler la connexion sous-jacente, auquel cas je devais appeler socket.disconnect(true)comme vous pouvez le voir est nécessaire à partir de la source ici
Socket.io utilise le modèle EventEmitter pour déconnecter / connecter / vérifier les pulsations afin que vous puissiez le faire. Client.emit('disconnect');
Cela n'a pas fonctionné pour moi:
`socket.disconnect()`
Cela a fonctionné pour moi:
socket.disconnect(true)
Le transfert truefermera la connexion sous-jacente au client et pas seulement à l'espace de noms auquel le client est connecté à la documentation Socket IO .
Exemple de cas d'utilisation: le client s'est connecté au serveur de socket Web avec un jeton d'accès non valide (jeton d'accès remis 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');
// });
Vous pouvez socket = undefinedeffacer la prise que vous avez connectée. Donc, quand vous voulez vous connecter, faites socket (url)
Donc ça ressemblera à ça
const socketClient = require('socket.io-client');
let socket;
// Connect to server
socket = socketClient(url)
// When want to disconnect
socket = undefined;
Ajoutez de nouvelles connexions de socket à un tableau, puis lorsque vous souhaitez tout fermer, faites une boucle et déconnectez-les. (du côté serveur)
var socketlist = [];
io.sockets.on('connection', function (socket) {
socketlist.push(socket);
//...other code for connection here..
});
//close remote sockets
socketlist.forEach(function(socket) {
socket.disconnect();
});