我是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];
中删除客户端
删除客户端并不会断开它们,它们仍然可以接收数据,只是不发送数据。
已解决
好奇的家伙的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.'});
}
});
}
字符串
客户端:
kickClient = function(client) {
this.socket.emit('kick', client);
};
型
6条答案
按热度按时间fkaflof61#
下面的代码适用于Socket.IO1.0,但是我不确定这是最好的解决方案:
字符串
更新:
在Socket.IO 0.9中,代码会略有不同:
型
mnemlml82#
这是一个老问题,但如果有人想知道更新的版本;
在Socket.IO v4.X中
io.sockets.connected[socket.id]
或io.sockets.sockets[socket.id]
不工作。所以我们要这样做;
字符串
ycggw6v23#
Socket.IO v4.X中的替代解决方案
所有套接字
字符串
针对特定套接字
型
迭代套接字
型
Reference link
mzsu5hc04#
下面是Socket.IO v4的另一个选项,它不需要使用Java语法:
字符串
如果有错误,有人可以纠正它,但我认为每个套接字都有一个唯一的ID,所以不需要迭代。
tsm1rwdh5#
伺服器:
字符串
委托方:
型
产品描述:当客户端进入网页时,他们会被询问他们的名字是什么,然后它将名称发送到服务器,然后服务器获取客户端的ID并将名称存储在对象“Users”中,并为其提供ID值“users.name =用户的socket.ID”,然后当您在客户端的控制台中写入“socket.emit”时,(“kick”,用户的用户名)'它断开了用户与套接字的连接,这样他们就不能再聊天了,直到他们重新加载,所以它几乎把他们踢出了聊天。
dced5bon6#
字符串