node.js socket.io 应用程序 - 如何将某人踢出聊天室?
Posted
技术标签:
【中文标题】node.js socket.io 应用程序 - 如何将某人踢出聊天室?【英文标题】:node.js socket.io app - How to kick someone from chat room? 【发布时间】:2016-07-26 17:00:15 【问题描述】:所以我有一个聊天应用程序,其中一次只能有两个用户在一个房间里。
请注意,clientInfo 是一个全局变量,每当新用户加入房间时,都会将一个对象变量与用户名和房间名称一起传递给服务器。然后执行这段代码
socket.on('joinRoom', function(userDetails)
clientInfo[socket.id] = userDetails; //variable contains name and room joined.
socket.join(userDetails.room);
我添加了一个功能,用户可以输入“kick”作为调用此函数的聊天消息:
function kickUser(socket)
socket.leave(clientInfo[socket.id].room);
delete clientInfo[socket.id];
上面的代码可以正常工作,但是我怎样才能改变函数来踢房间里的其他用户呢?我尝试了下面的代码,但最终还是把自己踢了出去。我认为 socket.leave() 不关心套接字 ID,但它只使用房间名称和调用该函数的人。
function kickUser(socket)
var info = clientInfo[socket.id];
if (typeof info == 'undefined')
return;
Object.keys(clientInfo).forEach(function(socketId)
if(info.room == clientInfo[socketId].room)
if (info.name != clientInfo[socketId].name)
socket.leave(clientInfo[socketId].room);
delete clientInfo[socketId];
);
【问题讨论】:
你希望每个用户都可以踢另一个用户和自己吗?或者您是否需要通过服务器 (=admin) 踢用户? 我想我对这两个问题的回答都是肯定的。我基本上希望能够选择我想要踢出的两个用户中的哪一个。目前,如果任何用户试图把某人踢出去,那个人就是他自己。 【参考方案1】:尝试实现下一个想法
在socket.on('connection', function(socket) ... );
中,您必须识别此连接/套接字的用户名和空间:客户端可以在连接本身上发送用户名/空间
socket.on('connect', function
socket.send(JSON.stringifydo: "introduce", name: "User1", room: "dasRoom")
)
或者服务器可以在client cookie 中读取它。您也可以在此处查看房间内的用户数。此信息可以存储在全局变量中。
用户可以通过套接字发送指定的消息来踢球,例如do: "kick
, user: "User1"
,或请求网址。例如/kick/User1
.
函数Kick
必须实现按名称查找用户、向受害者发送goodbay 消息并断开套接字的逻辑。服务器还必须通过套接字将User1 leave room
发送给活着的用户。
【讨论】:
以上是关于node.js socket.io 应用程序 - 如何将某人踢出聊天室?的主要内容,如果未能解决你的问题,请参考以下文章
找不到Node.js /socket.io/socket.io.js express 4.0
Node.js socket.io 没有响应 iOS socket.io 发出请求