存储聊天消息的推荐方法(node.js)

Posted

技术标签:

【中文标题】存储聊天消息的推荐方法(node.js)【英文标题】:Recommended approach to storing chat messages (node.js) 【发布时间】:2015-04-20 04:54:30 【问题描述】:

这是我第一次开发需要聊天功能的 Web 应用程序。有多个房间,对于有多少人可以加入一个房间没有限制。我无法理解的部分是存储消息的实际方法。问题在两部分中更是如此……首先,我是否正确假设除非所有消息都存储在数据库中,否则新连接的用户不能保留所有以前的消息?其次,不建议在发送每条消息时将它们保存到数据库中吗?如果它们没有实时保存,我还能如何跟踪?

感谢您的建议,不胜感激

【问题讨论】:

【参考方案1】:

如果你想将数据存储在内存中,并按时间间隔持久化,你可以使用 redis 来实现。此外,如果需要存储所有数据以供将来参考,您可以实施像 resque 这样的调度程序将数据从 redis 传输到您的数据库,并为应用程序状态数据(即更新的数据)释放 redis。

希望对你有所帮助...

谢谢

【讨论】:

嘿,谢谢你的回答....目前我正在使用 socket.io 来处理聊天过程,但消息不是持久的。那么使用 Redis 是否能够缓存消息并将其设置为在指定时间将它们提交到持久存储(即 mysql 数据库)?当新用户连接时,我假设我可以使用内存中的数据来检索当前消息? 是的......从redis你应该想出更多最近的消息,即在最后一天或仅仅2天内。这取决于数据量。一个单一的 Redis 实例能够存储 4GB 内存数据...更多我们必须使用 redis 集群...如果用户想要最近 7 天的数据等...那么您应该从 mysql 获取数据并显示它.. .【参考方案2】:

持久性是一项业务需求,是的,除非您有某种持久性存储,否则新用户无法看到以前的消息。您当然可以永久存储消息,并且许多应用程序都可以做到这一点。您也可以暂时存储它们,让消息在一段时间后过期并被删除。所有这些都可以使用 MongoDB 和 Redis 等常用工具轻松完成。如果您不需要持久化消息,则需要使用 Web 套接字在客户端之间发送消息。可能最著名的 Node 库是 Socket.io

【讨论】:

以上是关于存储聊天消息的推荐方法(node.js)的主要内容,如果未能解决你的问题,请参考以下文章

讨论:使用 node.js / socket.io 实现聊天室的最佳方式?

Node.js 并与像 Pidgin 这样的原生聊天交互?

在 PHP 中使用 Node.js、Socket.io、Redis 的私人聊天消息

多台机器上的 Node.js tcp 套接字服务器

node.js + socket.io 聊天群聊系统

聊天应用程序:node.js 还是 APE?