简体   繁体   English

Socket.io如何获取房间ID

[英]Socket.io how to get room id

I have problem, i want to get ONLY room id 我有问题,我想得到房间ID

I know about io.sockets.manager.rooms but it returns object :/ 我知道io.sockets.manager.rooms但它返回对象:/

In code (i send a list of rooms to client and he checks id) 用代码(我将房间列表发送给客户,他检查ID)

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

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

});

and client: 和客户:

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

THE SOLUTION IS: 解决方案是:

 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))

I'm not 100% sure what you need here. 我不确定100%是否需要这里。 Do you want to return an array of room names? 您要返回房间名称数组吗? If so, you can just get the keys from the object returned by io.sockets.manager.rooms, eg using a helper function provided by Underscore: 如果是这样,您可以从io.sockets.manager.rooms返回的对象中获取密钥,例如使用Underscore提供的帮助器函数:

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

EDIT: I've used Underscore here, but you can also code your own keys function, by looping through the objects properties, with something like this: 编辑:我在这里使用了下划线,但是您也可以通过循环对象属性来编写自己的按键功能,如下所示:

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

Note that this might miss some edge cases, but you get the idea 请注意,这可能会遗漏一些边缘情况,但您可以理解

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

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