繁体   English   中英

Socket.io如何获取房间ID

[英]Socket.io how to get room id

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

我不确定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;
}

请注意,这可能会遗漏一些边缘情况,但您可以理解

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM