2

我有问题,我只想获得房间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))
4

1 回答 1

1

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

socket.emit('rooms', _.keys(io.sockets.manager.rooms) );

编辑:我在这里使用了下划线,但您也可以通过循环遍历对象属性来编写自己的键函数,如下所示:

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;
}

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

于 2013-07-31T09:44:55.410 回答