节点聊天室,存储消息在数组或只是redis



我正在编写一个需要持久存储对话的多聊天室应用程序(即新用户应该能够看到旧消息)。我用的是socket。如果有帮助,请输入IO。

目前,当用户登录到一个房间时,我的节点应用程序检查是否有人去过那个房间(每个房间都有一个分层父级,例如,名为宠物的房间可能属于北美,因为有一个单独的欧洲宠物房间)。

如果这是一个人第一次在房间里呆了一段时间,它会从redis中加载该房间的所有消息。(最终redis存储的对话进入MySQL)。

我有一个多维数组messages["PARENT"]["ROOM"],这样messages["North America"]["Pets"]将是一个包含该房间所有消息的数组。除了误解了JS中的数组是如何工作的(正如在这个问题中解释的那样:javascript push多维数组),感觉我把情况弄得太复杂了。我使用MD阵列的理由是,对于一个活跃的房间,从Redis请求所有消息的往返是没有意义的。

对于我想要完成的事情,什么是最合乎逻辑的方法?我应该使用Redis而放弃这个吗?消息队列或者公共订阅服务器怎么样?(我尽量不把它复杂化,因为它只是一个朋友的原型)。

谢谢你,

从架构的角度来看,这是一个糟糕的设计。如果明天您想通过设置更多的服务器来扩展这个应用程序,该怎么办?当然,这些多维数组将特定于每个节点实例。将存储解耦有其自身的优势,其中之一就是可以向外扩展——存储现在可以在多个服务器之间共享。这完全取决于你想要达到什么目标。如果MD的大小增加,还可能会耗尽内存,从而影响应用程序的性能。

最新更新