Socket.io socket.io-redis NodeJS - Управление несколькими комнатами (в нескольких экземплярах узлов) с пользовательским игровым объектом, прикрепленным к каждой комнате - PullRequest
0 голосов
/ 16 июня 2019

Я создаю многопользовательскую карточную игру и использую пакеты Express, Socket.io, Redis, socket.io-redis npm.

Что я пытаюсь сделать, так это как-то прикрепить объект Game к каждой конкретной комнате, пытаясь использовать socket.io-redis, но я чувствую, что не совсем понимаю, как socket.io-redis сможет это сделать. Или socket.io-redis даже хороший выбор для этого?

Я настроил socket.io-redis в своем проекте Node и могу позволить пользователям присоединяться к комнатам с помощью 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;

Настройка до сих пор:

  • Экземпляр узла ( instance1 ), работающий на localhost:3000
  • Экземпляр узла ( instance2 ), работающий на localhost:3001

Текущий поток:

  1. user1 присоединяется room123 из instance1
  2. Прикрепите Game объект
  3. Добавить user1 в качестве игрока к Game
  4. user2 присоединений room123 из instance2
  5. Попытка получить доступ к объекту Game с шага 2
  6. Ошибка: Game не определено

Я предполагаю, что объект Game на шаге 2 никогда не устанавливается.

Я не уверен, что я использую Redis неправильно, или это что-то еще, или эта настройка полностью неверна для моих нужд? Любое понимание было бы здорово.

Я также чувствую, что моего понимания того, как работает Redis, недостаточно, я пытался прочитать документацию Redis и изучить другие пакеты NodeJS Redis, но я все еще борюсь с интеграцией Redis с Socket.io.

...