在socket.io 1.3.7上,如何在斷開連接事件時獲取套接字的空間?如何在斷開連接時獲取套接字的當前空間?
socket.on('disconnect', function() {
var currentRoom = ???
socket.broadcast.in(currentRoom).emit('user:left', socket.id);
});
在socket.io 1.3.7上,如何在斷開連接事件時獲取套接字的空間?如何在斷開連接時獲取套接字的當前空間?
socket.on('disconnect', function() {
var currentRoom = ???
socket.broadcast.in(currentRoom).emit('user:left', socket.id);
});
我通過在連接上設置currentRoomId變量來解決我的問題,所以我可以在斷開連接時訪問它。
io.sockets.on('connection', function(socket) {
var currentRoomId;
socket.on('join', function(roomId) {
socket.join(roomId);
currentRoomId = roomId;
});
socket.on('disconnect', function() {
socket.broadcast.in(currentRoomId).emit('user:left', socket.id);
});
}
您可以在開始時跟蹤全局聲明數組中的所有套接字,然後在斷開事件中檢查該數組的索引。事情是這樣的:
var allClients = [];
io.sockets.on('connection', function(socket) {
allClients.push(socket);
socket.on('disconnect', function() {
// this is your leaving Socket object
var index = allClients.indexOf(socket);
var leaving_socket = allClients[index];
// this is the way to get the rooms in 1.3.7
console.log(leaving_socket.rooms);
}
}
您可以檢查出的文檔here
編輯
的leaving_socket.rooms
是的,當然,數組而不是字符串,因爲一個單一的插座可以在許多房間一次。這意味着你將不得不遍歷該數組並找到你正在尋找的那個。套接字也總是位於與套接字的ID具有相同名稱的房間中。
不幸的是,leaving_socket.rooms是空的... – Tib
客房於「斷開連接」事件已經離開,使用「斷開」事件發生磨片的房間仍然入店之前,將要發射的「斷開」事件。
它的工作原理是這樣的:
socket.on('disconnecting', function(){
var self = this;
var rooms = Object.keys(self.rooms);
rooms.forEach(function(room){
self.to(room).emit('user left', self.id + 'left');
});
});
有一個改進的答案,這不存儲房間ID添加到一個變量。請參閱下面的答案。 – Garre