我希望服務器在其中一個客戶端斷開連接時向其發送消息。如何在客戶端斷開連接時向客房客戶端發送消息
事情是這樣的:
socket.on('disconnect', function() {
server.sockets.in(room).emit('bye');
});
但是......
- 我怎麼知道廣播哪個房間?
- 如果客戶已加入多個房間,該怎麼辦?
我希望服務器在其中一個客戶端斷開連接時向其發送消息。如何在客戶端斷開連接時向客房客戶端發送消息
事情是這樣的:
socket.on('disconnect', function() {
server.sockets.in(room).emit('bye');
});
但是......
檢查插座對象後,我想出了這個解決方案:
socket.on('disconnect', function() {
var rooms = io.sockets.manager.roomClients[socket.id];
for (var room in rooms) {
if (room.length > 0) { // if not the global room ''
room = room.substr(1); // remove leading '/'
console.log('user exits: '+room);
server.sockets.in(room).emit('bye');
}
}
});
沒有100這個% - 但不妨一試:
連接到一個房間或加入時新用戶進來,記住他們的用戶名或ID,或什麼東西在插座:
socket.on('adduser', function(username){
socket.username = username;
socket.join('room');
}
後來聽離開房間事件:
socket.room.on('leave', function(){
socket.broadcast.to(this).emit(socket.username + ' says seeya!');
}
無論如何它值得一試 - 我敢肯定類似的東西如果不行的話也能工作。
不,'socket.room'是未定義的。 –
你說得對 - 畢竟不行 - 你只需要添加一個訂閱/取消訂閱功能 - 查看這個聊天室的例子,這個聊天室顯示了房間的存在 - 它基本上會做你需要做的事情。 http://udidu.blogspot.ca/2012/11/chat-evolution-nodejs-and-socketio.html – Strat
謝謝,但在你發佈我想要的例子是在''disconnect()''服務器的功能完成.js'與此處接受的答案具有相同的代碼,並且這不是理想的方式(對我而言),因爲您必須手動找到用戶要離開的房間。 –
但是,從這個解決方案看來,您將在用戶連接到的每個房間發出'再見',而不僅僅是他們離開的那個房間? – Abadaba
當用戶斷開連接時,它會離開所有通道。所以它會向所有加入的頻道發出再見。 – Peter
假設我在瀏覽器的三個選項卡中加入了3個不同的房間,並關閉了選項卡3.我不應該在房間1和2中看到再見消息。每個選項卡都有自己的套接字ID。 – Abadaba