保存套接字ID并将消息发送给合适的人的策略

时间:2018-11-02 13:26:13

标签: javascript node.js sockets redis socket.io

我正在创建一个游戏(React Native + Node.js + SQL Server),用户都是团队成员。团队详细信息和成员都存储在数据库中。

我正计划使用socket.io使所有人保持同步,因此,例如,当一名球员离开团队时,一条消息需要传达给所有其他团队成员以说他们已经离开。

1)因此,我的第一个问题是,一旦用户连接并对其进行身份验证,将其套接字ID相对于播放器存储在数据库中是否是一个好策略,以便我们始终可以查找每个播放器的套接字ID? / p>

2)第二个问题是,如何获取团队成员列表并向所有成员发送消息?

我可以看到socket.io具有“房间”的概念,所以我想我可以研究为每个团队创建一个房间并将每个玩家加入房间,将房间ID存储在数据库中等等。即使没有玩家在线,房间仍然需要存在,并且我必须确保当人们加入/离开团队时,我能以一种防弹的方式从房间中订阅和取消订阅吗?

第二个选择是,每次我们需要向团队发送一些东西并循环遍历并向每个发送单独的消息时,仅从数据库中获取团队套接字ID的列表。那是非常低效的,还是socket.io在后台执行的操作?团队并不是将要成组发送的消息的唯一示例。当3个团队一起玩游戏时,我可能必须向每个玩游戏的人发送消息,所以房间可能会变得复杂。

奖金问题:我应该放弃并学习Redis并将所有内容都保留在内存中,删除SQL Server并让所有团队及其成员在Redis中拥有一个套接字ID吗?我想我仍然会有保持数据库和Redis同步的问题。当涉及到哪个球员属于哪个团队时,DB是所有事实的源头,因此,如果Redis商店不知道有人离开了团队,我们仍然会继续向他们发送消息。

道歉问题的道歉。

0 个答案:

没有答案