2017-04-19 62 views
2

所以,我的socket.join調用什麼都不做。在調用socket.join之後,然後列出套接字所在的房間,套接字僅連接到由其id定義的房間(它自己的房間)。socket.join不起作用(socket.io)

function onJoin(room) { 
    console.log("Joining room: " + room); 
    socket.join(room); 
    console.log(socket.id + " now in rooms ", socket.rooms); 
} 

將打印例如:

> Joining room: 5aba92759b9ffa9fdf579714d6aa125ddb05cb1172611331775e7a69dab37258 
> Q6D4h17DvdOZrbrEAAAC now in rooms { Q6D4h17DvdOZrbrEAAAC: 'Q6D4h17DvdOZrbrEAAAC' } 

如果它的確與衆不同,這裏是如何被創建我的socket服務器:

//app.js 
var app = express(); 
var http = require('http'); 
var server = http.Server(app); 
var io = require('socket.io')(server); 
var chat = require('./routes/chat/chat')(io); 

//chat.js 
module.exports = function(io) { 
    io.sockets.on('connection', function(socket) { 

    socket.on('join', onJoin); 
    ... 
} 

在哪裏的問題?

  • Socket.io v1.7.3

回答

0

用途:io.sockets.adapter.rooms

function onJoin(room) { 
    console.log("Joining room: " + room); 
    socket.join(room); 
    console.log(socket.id + " now in rooms ", getRoomsByUser(socket.id)); 
} 

function getRoomsByUser(id){ 
    let usersRooms = []; 
    let rooms = io.sockets.adapter.rooms; 

    for(let room in rooms){ 
     if(rooms.hasOwnProperty(room)){ 
      let sockets = rooms[room].sockets; 
      if(id in sockets) 
       usersRooms.push(room);   
     } 
    } 

    return usersRooms; 
} 

加入 '測試' 後,你會看到這樣的事情:

AEi6eIlkutIcm_CwAAAB now in rooms test,AEi6eIlkutIcm_CwAAAB 
0

問題是socket.join是異步的。因此,這將按預期工作:

socket.join(room, function() { 
    console.log("Socket now in rooms", socket.rooms); 
}); 
相關問題