Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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
Javascript 如何为多房间优化socket io代码结构_Javascript_Node.js_Express_Sockets_Socket.io - Fatal编程技术网

Javascript 如何为多房间优化socket io代码结构

Javascript 如何为多房间优化socket io代码结构,javascript,node.js,express,sockets,socket.io,Javascript,Node.js,Express,Sockets,Socket.io,依赖项设置: "axios": "^0.18.1", "express": "^4.17.1", "react": "^16.8.6", "react-dom": "^16.8.6", "react-scripts": "2.1.8", "socket.io": "^2.2.0", "socket.io-client": "^2.2.0" 我有一个react应用程序,可以与我的express js服务器对话。它使用套接字io进行实时客户端

依赖项设置:

    "axios": "^0.18.1",
    "express": "^4.17.1",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "react-scripts": "2.1.8",
    "socket.io": "^2.2.0",
    "socket.io-client": "^2.2.0"
我有一个react应用程序,可以与我的express js服务器对话。它使用套接字io进行实时客户端交互

在express for multi Room中构建代码的最佳方式是什么

目前我有多个客户端可以连接到不同的房间。最初在我的ExpressJS服务器中,我有全局变量,当多个客户端加入一个房间时,一切都正常工作

当然,问题是,当与其他客户有另一个房间时,我实际上是在他们之间共享全局变量。我知道这是一个问题(最初我主要是做PoC)。我有一些想法,但想知道是否有构建代码的最佳实践,以便在不同的房间中使用

例如,我的一个想法是存储一个大字典,在那里我有key=roomId,value=property包,其中包含我需要的所有变量 这应该行得通,但似乎不是最干净的方法

有什么想法吗

另外,将所有代码放在主连接代码中是否是最佳做法? i、 e:

更具体的例子: 假设我有这个事件和这个全局变量,轮到谁来玩游戏

var playerTurnOrder = [];
var nextPlayer = 0;
  socket.on("Pass", () => {
    let room = getRoomForSocket(socket);
    nextPlayer++;
    io.to(socket.rooms[room]).emit("RefreshBoard", {
      board: board,
      pieceIntroduced: null,
      nextPlayer: playerTurnOrder[nextPlayer % 4]
    });
  });
当有一个房间在游戏中时,上面的代码可以正常工作。 如果有两个房间(比如每个房间有4个客户) 我现在有一个问题,因为我正在共享playerTurnOrder变量和nextPlayer变量

这就是为什么我在想,也许我可以拥有一本字典(或者评论中建议的地图),其中key=room,value=more变量我想拥有。。
这应该行得通,但我们正在寻找那些在如何在NodeJ中构造socket io代码以及拥有多个房间(通道)方面有类似困难的人。

您真的必须向我们展示您的代码,以便我们就如何做提出具体建议。你的话并不能真正描述你想做什么。另外,socket.io用户不“连接到房间”,因此部件会混淆。它们连接到服务器,可以连接零个或多个房间。关于如何在这里构造代码的问题实际上应该显示相关的代码。如果具有与房间关联的动态状态,则有多种方法可以保持该状态。请展示您的一些代码,这样我们就可以看到您试图跟踪的是什么,然后我们可以提出一些建议。我的一个想法是存储一个大字典,在那里我有key=roomId,value=property包,其中包含我需要的所有变量。这是一个很好的方法。使用
Map()
对象。感谢您的评论,我将展示一些代码。您真的必须向我们展示您的代码,以便我们就如何做提出具体建议。你的话并不能真正描述你想做什么。另外,socket.io用户不“连接到房间”,因此部件会混淆。它们连接到服务器,可以连接零个或多个房间。关于如何在这里构造代码的问题实际上应该显示相关的代码。如果具有与房间关联的动态状态,则有多种方法可以保持该状态。请展示您的一些代码,这样我们就可以看到您试图跟踪的是什么,然后我们可以提出一些建议。我的一个想法是存储一个大字典,在那里我有key=roomId,value=property包,其中包含我需要的所有变量。这是一个很好的方法。使用
Map()
对象。感谢您的评论,我将展示一些代码
var playerTurnOrder = [];
var nextPlayer = 0;
  socket.on("Pass", () => {
    let room = getRoomForSocket(socket);
    nextPlayer++;
    io.to(socket.rooms[room]).emit("RefreshBoard", {
      board: board,
      pieceIntroduced: null,
      nextPlayer: playerTurnOrder[nextPlayer % 4]
    });
  });