我正在创建一个多人纸牌游戏,并使用Express
,Socket.io
,Redis
,socket.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
上运行的localhost:3001
上运行的电流:
Game
对象Game
Game
对象
Game
未定义我猜正在发生的事情是从未设置步骤 2 中的Game
对象。
我不确定我是否在错误地使用Redis还是其他东西,或者此设置完全不符合我的需求?任何见识都会很棒。
我还感到我对Redis的工作原理还缺乏了解,我尝试阅读Redis文档并研究其他NodeJS Redis软件包,但我仍在努力将Redis与Socket.io集成。