设计我也会使用socket.io发送消息。它背后有一个伟大的社区,我也使用MongoDb,因为所有的东西都使用JSON格式,并且由于它使用JavaScript,所以它与Node完美集成。
现在你感兴趣的部分是REDIS。 Redis是一个位于网络RAM中的数据库,如果您的流量更高/需要快速/更少的挂起和等待,应该与mongodb一起使用。
REDIS会是您与会话聊天的临时保存,因为在计算机上执行磁盘写/读/查询操作非常多(查看您的MongoDB),如果您打算保存每条消息的聊天记录。这样做MongoDb从长远来看并不会缩小所有的井,并且不如REDIS那么快。请注意,REDIS数据库只能保存临时聊天记录,比如最近的一百万次聊天会话或一些限制(全部在RAM中,因此大小是有限的,在一台服务器上不能有太字节或数百GB的RAM)。
这样的数据流会看起来像
- 用户发送消息
- 服务器通过HTTP(S)后/ PUT接收讯息话题 - 阿贾克斯/可观察
- 服务器将使用socket.io发射通过特定的密钥/会话/消息将消息保存到REDIS的同时将消息发送给指定用户。
- 指定用户通过io事件获取屏幕上的更新。
- 中间应该检查REDIS数据库是否已满。如果它已满,则删除最后的10,000条非活动消息(如果服务器尚未满足,可以从1年前开始)删除一些空间。
将通话保存在手机中是一个好主意,因为它可以节省用户数据/带宽,并且可以在离线时查看他们的留言。 一个解决方案是使用SQL Lite,它是一个轻量级库,它将作为一个数据库坐在您的应用程序中,您可以对其执行查询,如果您熟悉RDBMS,您将不会遇到实现它的问题。但是现在,您必须找到一种管理将数据保存到REDIS/SQL-LITE/MongoDb的好方法。