Node.js 多节点多人游戏服务器

Node.js 多节点多人游戏服务器,node.js,nginx,redis,load-balancing,socket.io-redis,Node.js,Nginx,Redis,Load Balancing,Socket.io Redis,假设你正在制作一个反击服务器。我们有一个大厅和多个房间,在这里可以进行游戏 也就是说,我有3节点服务器,nginx负载均衡器,redis 我使用socket.io和redis适配器,因此我可以向任何服务器上的每个客户端发送消息 有一件事我不明白。例如,我有这样的东西: var currentGames = {}; socket.on('createGame', function(gameName){ var game = new Game(); game.addPlayer

假设你正在制作一个反击服务器。我们有一个大厅和多个房间,在这里可以进行游戏

也就是说,我有3节点服务器,nginx负载均衡器,redis

我使用socket.io和redis适配器,因此我可以向任何服务器上的每个客户端发送消息

有一件事我不明白。例如,我有这样的东西:

    var currentGames = {};


socket.on('createGame', function(gameName){
  var game = new Game();
  game.addPlayer(socket.id);


  currentGames.push();

  // ... Send to all clients, that game created and they can join
});

socket.on('joinGame', function(gameName){
  currentGames[gameName].addPlayer(socket.id);

  // ... Send to all players of this game, that player joined
});


socket.on('walk', function(gameName, coordinates){
   currentGames[socket.id].walk(player, coordinates);

   // ... Get all players positions and send to clients
});


class Game
{
  gameName;
  players = {};
  score;

  constructor(name){
    this.gameName = name;
  }

  addPlayer(player){
    players[name] = new Player(player);
  }

  walk(id, coordinates){
    this.players[id].updatePosition(coordinates);
  }  
}

class player
{
  id;
  life = 100;
  coordinates = {0,0,0};
  kills;
  death;

  constructor(id){
    this.id = id;
  }

  updatePosition(coords){
    this.coordinates = coords;
  }


}
例如,我刚刚编写了这段代码

假设,用户_1在节点1上,用户2在节点2上

若用户_1创建游戏,实例将被创建并保存在节点1上

所以当用户_2收到关于游戏的信息时,他点击了一个加入按钮, 客户端将向服务器发送请求,在节点2上不会有用户_1创建的游戏实例

我希望你能理解我在说什么(我的英语不好)

我猜,对于所有节点,游戏实例的对象必须是全局的。但我不知道怎么做

我是否应该使用redis或mongo或其他工具来存储游戏信息,而不是
变量


我走错方向了吗?

你也应该同步Redis中的游戏状态、房间和游戏实例。
我有一些笔记:
+实体状态-管理游戏状态,存储和设置,将游戏信息获取到Redis
+客户端状态-每个连接客户端都有客户端状态并与实体状态同步,游戏循环中的每个勾号,检查实体状态和客户端状态之间的差异,并将其发送到客户端并更新游戏客户端