Socket.io socket.io-redis NodeJS-使用附加到每个房间的自定义游戏对象管理多个房间(在多个节点实例上)

时间:2019-06-16 15:09:12

标签: node.js redis socket.io socket.io-redis

我正在创建一个多人纸牌游戏,并使用ExpressSocket.ioRedissocket.io-redis npm软件包。

我要完成的工作是通过尝试使用socket.io-redis将Game对象以某种方式附加到每个特定的房间,但是我感到我不太了解socket.io-redis如何能够去做。还是socket.io-redis甚至是一个不错的选择?

我已经用我的Node项目配置了socket.io-redis,并且能够通过使用socket.io-redis'.remoteJoin()让用户加入会议室,但是就我所知

我如何配置socket.io-redis

 /**
  * @private
  * @memberof GameServer
  */
  private sockets(): void {
    this.io = socketIo(this.server);
    this.io.adapter(redisAdapter({ host: 'localhost', port: Number(process.env.REDIS_PORT) }));
  }

用户如何加入房间

this._io.of(CONSTANTS.BASE_NAMESPACE).adapter.remoteJoin(socket.id, joinRoom.roomId, (joinErr: any) => {
  if (joinErr) {
  return socket.emit(CONSTANTS.JOIN_ROOM,
    ReturnMessages.genericTemplate(false, `failed to join room ${joinRoom.roomId}`));
}
...

我如何尝试向房间添加Game对象

let game = new Game();
game.roomId = joinRoom.roomId;
game.addPlayer(player);

this._io.of(CONSTANTS.BASE_NAMESPACE).adapter.rooms[joinRoom.roomId].gameObject = game;

到目前为止的设置:

    localhost:3000上运行的
  • 节点实例( instance1
  • localhost:3001上运行的
  • 节点实例( instance2

电流:

  1. user1 instance1
  2. 加入 room123
  3. 附加一个Game对象
  4. user1 作为播放器添加到Game
  5. user2 instance2
  6. 加入 room123
  7. 尝试从步骤 2
  8. 访问Game对象
  9. 错误:Game未定义

我猜正在发生的事情是从未设置步骤 2 中的Game对象。

我不确定我是否在错误地使用Redis还是其他东西,或者此设置完全不符合我的需求?任何见识都会很棒。

我还感到我对Redis的工作原理还缺乏了解,我尝试阅读Redis文档并研究其他NodeJS Redis软件包,但我仍在努力将Redis与Socket.io集成。

0 个答案:

没有答案