la force de déconnexion du client à partir du serveur avec la prise.io et nodejs
Est-il possible de déconnecter un client avec SocketIO, et littéralement fermer la connexion? Donc, si quelqu'un est connecté à mon serveur, et je veux fermer la connexion entre eux et mon serveur, comment pourrais-je aller sur le faire?
Vous devez vous connecter pour publier un commentaire.
Edit: C'est maintenant possible
Vous pouvez maintenant simplement appeler
socket.disconnect()
sur le côté serveur.Ma réponse originale à cette question:
Ce n'est pas encore possible.
Si vous en avez besoin, ainsi, de voter/commenter ce problème.
iptables
), plus vous économiserez. Dans la plupart des cas, il suffit de frapper le client devrait être suffisant, mais, depuis socketio ne se connecte pas rapidement, et si quelqu'un veut vraiment à DoS vous, ils ont d'autres moyens de toute façon (par exemple le téléchargement de pages de vous).socket.disconnect()
peut être utilisé que sur le côté client, pas sur le côté serveur.Client.emit('disconnect')
déclenche la déconnexion de l'événement sur le serveur, mais n'est pas efficace pour déconnecter le client. Le client n'est pas conscient de la déconnexion.Donc, la question reste : comment faire pour forcer un client à se déconnecter du serveur côté ?
Client.emit('disconnect')
manuellement la plus récente de la socket.io versions, il y a maintenant un serveur-côtésocket.disconnect()
(voir ma réponse).socket.disconnect()
peut être utilisé sur le côté serveur aussi.disconnect()
fonction est fini?Aucune raison pourquoi vous ne pouvez pas avoir le serveur émettent un message pour le client qui fait appel à la fonction sectionneur?
Sur le client:
Sur Le Serveur:
En supposant que votre socket socket nommée, utilisation:
Pour ceux qui ont trouvé sur google - il y a une solution pour ce droit maintenant:
Socket.disconnect()
coups de pied le client (côté serveur). Pas de chance pour le client de rester connecté 🙂disconnect
de l'événement pour savoir si il s'est déconnecté. Peut-être aussi leclose
cas, je ne suis pas tout à fait sûr. Voir socket.io documentation pour plus d'informations sur cette.Dans mon cas, j'ai voulu abattre la connexion sous-jacente dans ce cas, je devais appeler
socket.disconnect(true)
comme vous pouvez le voir il est nécessaire de le source iciclient._onDisconnect()
devrait fonctionnerSocket.io utilise le EventEmitter modèle de déconnecter/connecter/vérifier les battements de cœur, de sorte que vous pourriez faire.
Client.emit('disconnect');
Ce ne fonctionne pas pour moi:
Ce a fait un travail pour moi:
Remise
true
va fermer la connexion sous-jacente pour le client et pas seulement l'espace de noms que le client est connecté à Socket IO Documentation.Un exemple de cas d'utilisation: le Client fait de se connecter au web socket serveur avec accès non valide token (jeton d'accès remis à web socket serveur avec connexion params). Web socket serveur informe le client qu'il va fermer la connexion, en raison de sa non valide jeton d'accès:
Vérification ce matin, il semble qu'il est maintenant:
https://socket.io/docs/client-api/#socket-close
Je suis en utilisant
client.emit('disconnect')
+client.removeAllListeners()
pour le client connecté pour ignorer tous les événements après la déconnecterJ'utilise sur le côté client
socket.disconnect();
utilisation :
ne pas utiliser :
Ajouter de nouvelles connexions de socket à un tableau et puis quand vous voulez fermer tous - boucle à travers eux et de se déconnecter. (côté serveur)