gpt4 book ai didi

javascript - Socket.io 套接字位于哪个房间?

转载 作者:太空宇宙 更新时间:2023-11-03 22:26:38 25 4
gpt4 key购买 nike

我是 socket.io 的新手,不熟悉如何处理它们的数据结构。根据另一篇文章,我需要使用“socket.rooms”来找出套接字所在的房间。但是,如果我在控制台日志中打印出“socket.rooms”,我会得到[Object 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});
});

最佳答案

感谢@Quentin,我能够弄清楚。

console.log(socket.rooms); // prints all elements of the rooms object

82号房间的一名玩家看起来像这样:

{ '82': '82', 'oNKayk7Ny8GKh1-4AAAB': 'oNKayk7Ny8GKh1-4AAAB' }

第一个元素是房间,第二个元素是 socket.io 创建的浏览器 cookie。

为了解决我的问题,我需要弄清楚房间是什么元素,因此“82”不足以满足我正在做的事情。我正在使 82 更加具体,所以我知道该属性是我引用的房间,而不是他们的 cookie 或其他东西。

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

测试了一下,可以用!

关于javascript - Socket.io 套接字位于哪个房间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45297500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com