我已經放在一起聊天應用程序,人們可以加入/離開房間。我遇到了一些非常奇怪的事情,我真的無法理解它。即使客戶端已經離開房間,socket.io消息仍然被廣播
這是從我的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返回undefined )
我在前端放置了兩個按鈕,一個加入房間,一個放置房間。加入按鈕通過處理:
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後(名);用戶仍然可以發送消息,而console.log(「發送到==>」+ client.room);仍然會輸出'發送到==> room1'),而客戶端已經離開了房間。我用「socket.sockets.clients(client.room)」證實了這一點 - 客戶端不再在這裏列出。
有沒有人有任何想法,爲什麼我仍然從客戶端發送消息到他不屬於的房間?
UPDATE
從剛果民主共和國的答案後,我已經更新了我的發送功能:
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);
}
}
});
這是最優雅的解決方案?
請在我的文章中看到更新。謝謝 – Tamas
非常感謝:) – Tamas