我想保證一個用戶一次只能在一個房間裏,但是我在這方面遇到了麻煩。我煮完問題,下不能夠得到的所有房間的插座是目前在列表socket.io:只有一個房間到一個插座
我目前的策略是做這樣的事情:
io.on('connection', function(socket) {
console.log('A user just connected with id ' + socket.id);
socket.on("change room", function(data) {
// this SHOULD return a list of all rooms this user is in
var socketsRooms = socket.rooms;
console.log(socket.rooms) //{ '/#3tE4Up5PRbTfsU0JAAAD': '/#3tE4Up5PRbTfsU0JAAAD' }
console.log(typeof socket.rooms) // object
// Loop through the rooms and leave them
for (var room in socketsRooms) {
console.log('LEAVING ROOM: ', room);
socket.leave(room);
}
// Join the new room
socket.join(data.newroom);
});
socket.on('disconnect', function() {
console.log('user ' + socket.id + ' disconnected');
});
})
是否有問題與socket.rooms的文檔?它說它應該返回一個套接字連接到的房間數組,但是我將數據作爲一個id對象返回。 EX: { '/#3tE4Up5PRbTfsU0JAAAD': '/#3tE4Up5PRbTfsU0JAAAD' }
...對我來說,我希望像['issues']
在Socket.io github page的socket.rooms介紹說:
串識別房間這個插座的哈希中,索引爲 房間名稱。
之前打標爲重複:
我已經簽出瞭如下因素的問題:
- How to leave all rooms that the socket is connected to at one go in Node.js
- socket.io: assure socket joins only one room at a time
回答第一個問題似乎大多數黑客一起解決方案,我很確定它會工作,因爲它假定解決方案是維護我們自己的列表,但我更喜歡使用socket.io的工作解決方案。
我使用在客戶端上angular2測試socket.io v1.4.5最新優化版本(有沒有什麼幫助了在所有)