Socket.io déconnecter le client par identifiant

Je suis nouveau sur nodejs et j’essaie d’écrire un forum de discussion comme beaucoup de gens l’ont fait. Le chat se compose de plusieurs salles et clients. Les commandes telles que /nick /join /help /ls users /ls rooms fonctionnent comme prévu, bien que je ne parvienne pas à faire fonctionner une commande /kick .

Je ne sais tout simplement pas comment vous déconnectez un client par son identifiant. Jusqu’à présent, le /kick client est en mesure de présenter le socket.id de chaque client bien que je sois bloqué pour que le code soit lancé via socket.id.

Code jusqu’ici:

Déconnectez le client qui a envoyé /kick : socket.disconnect();

Supprimer le client de arg /kick client : delete io.sockets.sockets[client];

La suppression du client ne les déconnecte pas, cependant, ils peuvent toujours recevoir des données mais ne pas les envoyer.

Résolu

La version 0.9 de CuriousGuy fonctionnait parfaitement, pour ceux que ça intéresse – voici le code que j’utilise.

Du côté serveur:

 handleClientKick(socket); ... function handleClientKick(socket) { socket.on('kick', function(client) { if (typeof io.sockets.sockets[client] != 'undefined') { socket.emit('message', {text: nickNames[socket.id] + ' kicked: ' + nickNames[client]}); io.sockets.sockets[client].disconnect(); } else { socket.emit('message', {text: 'User: ' + name + ' does not exist.'}); } }); } 

Côté client:

 kickClient = function(client) { this.socket.emit('kick', client); }; 

Le code suivant fonctionne avec Socket.IO 1.0, cependant je ne suis pas sûr que ce soit la meilleure solution:

 if (io.sockets.connected[socket.id]) { io.sockets.connected[socket.id].disconnect(); } 

Mettre à jour:

Avec Socket.IO 0.9, le code serait légèrement différent:

 if (io.sockets.sockets[socket.id]) { io.sockets.sockets[socket.id].disconnect(); }