rwx*_*xes 5 disconnect node.js socket.io
我是nodejs的新手,并试图像许多人一样写聊天室.聊天包括多个房间和客户./nick
/join
/help
/ls users
/ls rooms
尽管我在获取/kick
命令工作时遇到了麻烦,但是像你期望的那样工作的命令.
我只是不确定你如何通过id断开客户端,到目前为止/kick client
能够呈现相应的客户端socket.id虽然我仍然坚持通过socket.id踢代码.
代码到目前为止:
断开发送的客户端/kick
:socket.disconnect();
从arg中删除客户端/kick client
:delete io.sockets.sockets[client];
删除客户端不会断开它们,但它们仍然可以接收数据而不发送它.
对于那些感兴趣的人来说,CuriousGuy的0.9能够完美运行 - 这是我正在使用的代码.
服务器端:
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.'});
}
});
}
Run Code Online (Sandbox Code Playgroud)
客户端:
kickClient = function(client) {
this.socket.emit('kick', client);
};
Run Code Online (Sandbox Code Playgroud)
Ole*_*leg 10
以下代码适用于Socket.IO 1.0,但我不确定这是最佳解决方案:
if (io.sockets.connected[socket.id]) {
io.sockets.connected[socket.id].disconnect();
}
Run Code Online (Sandbox Code Playgroud)
更新:
使用Socket.IO 0.9,代码会略有不同:
if (io.sockets.sockets[socket.id]) {
io.sockets.sockets[socket.id].disconnect();
}
Run Code Online (Sandbox Code Playgroud)
这是一个老问题,但如果有人想知道新版本;
在Socket.IO v4.X io.sockets.connected[socket.id]
中还是io.sockets.sockets[socket.id]
不起作用。
所以我们需要这样做;
io.sockets.sockets.forEach((socket) => {
// If given socket id is exist in list of all sockets, kill it
if(socket.id === givenSocketID)
socket.disconnect(true);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11547 次 |
最近记录: |