Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
socket.io,如何将状态附加到套接字室_Socket.io - Fatal编程技术网

socket.io,如何将状态附加到套接字室

socket.io,如何将状态附加到套接字室,socket.io,Socket.io,我想知道是否有任何方法将状态附加到各个房间,可以这样做吗 假设我创建了一个房间房间名称: socket.join(“房间名称”) 如何将对象、数组和变量分配给该特定房间?我想做一些类似的事情: io.adapter.rooms[“room_name”].max=maxPeople 其中,我给房间room\u name一个状态变量max,并且max被分配变量maxPeople的值,即int类型。max为允许加入该特定房间的最大人数存储一个变量。其他房间可以/可以指定不同的最大值。嗯,有一个对象(s

我想知道是否有任何方法将状态附加到各个房间,可以这样做吗

假设我创建了一个房间
房间名称

socket.join(“房间名称”)

如何将对象、数组和变量分配给该特定房间?我想做一些类似的事情:

io.adapter.rooms[“room_name”].max=maxPeople

其中,我给房间
room\u name
一个状态变量
max
,并且
max
被分配变量
maxPeople
的值,即int类型。max为允许加入该特定房间的最大人数存储一个变量。其他房间可以/可以指定不同的最大值。

嗯,有一个对象(socket.io内部)表示房间。它存储在适配器中。您可以看到对象的基本定义。因此,如果您进入适配器并获取给定名称的房间对象,您可以向其中添加数据,只要房间没有被删除,它就会一直保留在那里

但是,出于以下几个原因,这有点危险:

  • 如果文件室中只有一个连接,而该用户断开连接并重新连接(例如,因为他们导航到新页面),文件室对象可能会被破坏,然后重新创建,您的数据也会丢失

  • 直接访问文件室对象和文件室列表不在public socket.io接口中(据我所知)。适配器是可替换的,当您在集群中使用redis适配器时,它的工作方式可能会有所不同(事实上,这可能是因为房间列表集中在redis数据库中)。在socket.io的未来版本中,非公共接口也会发生变化(众所周知,socket.io会不时重新安排一些内部结构)

  • 所以,如果这是我的代码,我只需要创建自己的数据结构来保存房间特定的信息

    将某人添加到房间时,请确保您自己的房间对象存在,并使用所需数据正确初始化。使用
    贴图
    对象(房间名称为键,您自己的房间对象为值)可能会很好。从文件室中删除某人时,如果文件室是空的,则可以清理自己的数据结构

    您甚至可以将自己的房间对象作为加入或离开房间时使用的中心API,然后它将维护自己的数据结构,然后还可以调用socket.io来加入或离开房间。这将在任何人加入或离开房间时集中维护您自己的数据结构。这还允许您在房间对象中有任何用户之前(如果您需要/想要这样做的话)使用它们自己的属性预先创建房间对象,而socket.io不会这样做