Javascript 插座。io插座在哪个房间?

Javascript 插座。io插座在哪个房间?,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我不熟悉socket.io,不熟悉如何处理它们的数据结构。根据另一篇文章,我需要使用“socket.rooms”来找出插座所在的房间。然而,如果我在控制台日志中打印出“socket.rooms”,我会得到[Object]。它是某种类型的对象,但没有关于如何正确访问该对象的任何文档,我不知道该怎么做 下面是非常简单的代码,我希望“?”是他们所在的房间。显然,它们可能在不止一个房间里,在这种情况下,我可以建立一个循环。。。但对于我正在建设的,他们将永远只在一个房间 // Send Message s

我不熟悉socket.io,不熟悉如何处理它们的数据结构。根据另一篇文章,我需要使用“socket.rooms”来找出插座所在的房间。然而,如果我在控制台日志中打印出“socket.rooms”,我会得到[Object]。它是某种类型的对象,但没有关于如何正确访问该对象的任何文档,我不知道该怎么做

下面是非常简单的代码,我希望“?”是他们所在的房间。显然,它们可能在不止一个房间里,在这种情况下,我可以建立一个循环。。。但对于我正在建设的,他们将永远只在一个房间

// Send Message
socket.on('game_update', function(data){

    var tStamp = Date.now();
    console.log(tStamp +" - "+ data.msg);

    io.in('????').emit('game_update', {time: tStamp, msg: data});
});

通过不同的版本,Socket.IO发生了很大的变化。可以将其视为一家方向性差、政策不扎实的公司,不断地改变,损害了客户(开发商)的利益

深入“io”我发现了这个,我在上一个项目中一直在使用它,因为我遇到了与您相同的问题:

io.sockets.adapter.sids[socket.id]
如果在获取房间内的插座的同时,还需要获取房间内的所有插座,请使用以下方法:

io.sockets.adapter.rooms['nameOfTheRoom'].sockets

多亏了@Quentin,我才明白过来

console.log(socket.rooms); // prints all elements of the rooms object
82号房间里的一名球员看起来像:

{ '82': '82', 'oNKayk7Ny8GKh1-4AAAB': 'oNKayk7Ny8GKh1-4AAAB' }
第一个元素是房间,第二个元素是socket.io创建的浏览器cookie

为了解决我的问题,我需要弄清楚房间是什么元素,所以“82”不适合我所做的。我正在使82更具体,因此我知道,该财产是我所指的房间,而不是他们的饼干或其他东西

socket.join("game_id="+data.game_id); // to join the room, but also id this from other properties
那么我需要的最终代码是:

socket.on('game_update', function(data){

    console.log(socket.rooms); // for debug, prints the data
    var tStamp = Date.now();
    console.log(tStamp +" - "+ data.msg);

    var roomsObj = socket.rooms;

    for(i=0; i < Object.keys(roomsObj).length; i++)
    {
        if(roomsObj[Object.keys(roomsObj)[i]].split("=")[0] == "game_id")
        {
            //broadcasts to every room they are in, which begins in "game_id="
            io.in(roomsObj[Object.keys(roomsObj)[i]]).emit('game_update', {time: tStamp, msg: data});
        }
    }
});
socket.on('game_update',函数(数据){
console.log(socket.rooms);//对于调试,打印数据
var tStamp=Date.now();
console.log(tStamp+“-”+data.msg);
var roomsObj=插座。房间;
对于(i=0;i

测试了它,它正在工作

我得到[对象]。-您是在打印
socket.rooms
,还是像您在示例中使用data.msg那样将其转换为字符串(例如
“something”+socket.rooms
)?为了记录对象的内容,请使用JSON。stringify(obj)不要使用
JSON.stringify
,这将丢弃大多数数据类型。@Quentin-我只是打印socket.rooms,生成[Object Object]@Quentin-不,对不起,我错了,在查看代码时,我确实将其转换为字符串。我试着按照你的建议打印对象,这确实显示了对象内部的元素。谢谢解决自己的问题是世界上最好的感觉,干得好!我也在试图弄明白这一点,幸运的是,与2017年相比,现在在这方面有更多的资源!