【问题标题】:Socket.io how to get room idSocket.io如何获取房间ID
【发布时间】:2013-07-31 09:17:01
【问题描述】:

我有问题,我想获得房间号

我知道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))

【问题讨论】:

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


    【解决方案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;
    }
    

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

    【讨论】:

    • 是的,我是认真的!但我的代码有问题,我收到错误:ReferenceError: _ is not defined
    • 我以Underscore 为例来获取“keys”功能,您必须将该库添加到您的项目中才能使用它。
    • 我改变了一点功能,我有:
    • var object = io.sockets.manager.rooms; socket.emit('start', 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; })
    • 返回:function ack() { self.packet({ type: 'ack' , args: io.util.toArray(arguments) , ackId: packet.id }); }
    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2018-05-24
    • 2014-07-14
    • 2016-07-21
    • 2019-05-13
    • 1970-01-01
    相关资源
    最近更新 更多