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?
117
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?
la source
Client.emit('disconnect')
manuellement avec les versions récentes de socket.io, il y a maintenant un côté serveursocket.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:
Sur le serveur:
la source
En supposant que le socket nommé de votre socket, utilisez:
la source
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é :)la source
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:
https://socket.io/docs/client-api/#socket-close
la source
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 icila source
client._onDisconnect()
devrait marcherla source
Socket.io utilise le modèle EventEmitter pour déconnecter / connecter / vérifier les pulsations afin que vous puissiez le faire.
Client.emit('disconnect');
la source
Cela n'a pas fonctionné pour moi:
Cela a fonctionné pour moi:
Le transfert
true
fermera 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:
la source
J'utilise
client.emit('disconnect')
+client.removeAllListeners()
pour le client connecté pour ignorer tous les événements après la déconnexionla source
J'utilise côté client
socket.disconnect();
la source
utilisation :
ne pas utiliser :
la source
Vous pouvez
socket = undefined
effacer la prise que vous avez connectée. Donc, quand vous voulez vous connecter, faites socket (url)Donc ça ressemblera à ça
la source
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)
la source