Socket.io如何获得房间ID

时间:2013-07-31 09:17:02

标签: javascript html websocket socket.io server-side

我有问题,我想房间ID

我知道io.sockets.manager.rooms,但它返回对象:/

在代码中(我向客户发送房间列表并检查ID)

io.sockets.on('connection', function(socket) {

   socket.join('main');
   socket.emit('start',io.sockets.manager.roomClients[socket.id]);      

});

和客户:

var socket = io.connect('http://localhost:3250');                           
         socket.on('start', function(data) {    
            panel.innerHTML = data;
                }       

解决方案是:

 var keys = function( object ) {
  if ( !(object && typeof object === 'object') ) {
    return null;
  }
  var result = [];
  for (var key in object) {
    if (object.hasOwnProperty(key)) {
      result.push(key)
    }
  }
  return result;
}

   var obiekt = io.sockets.manager.rooms;

   socket.emit('rooms', keys(obiekt))

1 个答案:

答案 0 :(得分:1)

我不是百分百确定你需要什么。你想要返回一系列房间名称吗?如果是这样,你可以从io.sockets.manager.rooms返回的对象中获取密钥,例如使用Underscore提供的辅助函数:

socket.emit('rooms', _.keys(io.sockets.manager.rooms) );
编辑:我在这里使用过Underscore,但您也可以通过循环遍历对象属性来编写自己的键功能,如下所示:

var keys = function( object ) {
  if ( !(object && typeof object === 'object') ) {
    return null;
  }
  var result = [];
  for (var key in object) {
    if (object.hasOwnProperty(key)) {
      result.push(key)
    }
  }
  return result;
}

请注意,这可能会遗漏一些边缘情况,但您明白了