Я создаю многопользовательскую карточную игру и использую пакеты 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
Текущий поток:
- user1 присоединяется room123 из instance1
- Прикрепите
Game
объект
- Добавить user1 в качестве игрока к
Game
- user2 присоединений room123 из instance2
- Попытка получить доступ к объекту
Game
с шага 2
- Ошибка:
Game
не определено
Я предполагаю, что объект Game
на шаге 2 никогда не устанавливается.
Я не уверен, что я использую Redis неправильно, или это что-то еще, или эта настройка полностью неверна для моих нужд? Любое понимание было бы здорово.
Я также чувствую, что моего понимания того, как работает Redis, недостаточно, я пытался прочитать документацию Redis и изучить другие пакеты NodeJS Redis, но я все еще борюсь с интеграцией Redis с Socket.io.