我整理了一个聊天应用程序,人们可以在其中加入/离开房间。我遇到了一些非常奇怪的事情,我真的无法理解它。
这是我的 server.js(后端)的摘录:
client.on("send", function(msg) {
console.log("Sending to ==> " + client.room);
if ('undefined' !== typeof client.room) {
socket.sockets.in(client.room).emit("chat", people[client.id], msg);
}
});
我本质上是在“强迫”人们加入一个房间(如果他们不在一个房间里,client.room 返回未定义。)
我在前端放置了两个按钮,一个用于加入房间,一个用于离开房间。加入按钮通过以下方式处理:
client.on("joinRoom", function(name) {
client.join(name); //where name is the name of the room coming from the frontend
}
离开房间功能如下所示:
client.on("leaveRoom", function(name) {
client.leave(name);
}
现在,问题是这样的:在 client.leave(name); 之后 位,用户仍然可以发送消息,并且 console.log("Sending to ==> " + client.room); 当客户离开房间时,仍然会输出“发送到 ==> room1”)。我用“socket.sockets.clients(client.room)”确认了这一点——这里不再列出客户端。
有谁知道为什么我仍然从客户那里向他不属于的房间发出消息?
更新
在得到 DRC 的答复后,我更新了我的发送功能:
client.on("send", function(msg) {
for (key in socket.sockets.manager.roomClients[client.id]) {
if (key ==="/" + client.room) {
socket.sockets.in(client.room).emit("chat", people[client.id], msg);
}
}
});
这是最优雅的解决方案吗?