我在互联网上看到了很多使用 Web 套接字和 RabbitMQ 进行聊天的示例(https://github.com/videlalvaro/rabbitmq-chat https://github.com/videlalvaro/rabbitmq-chat),但是我不明白为什么聊天应用程序需要消息队列。
为什么不能通过 Web 套接字将消息从浏览器发送到服务器,然后服务器再次使用具有广播方法的 Web 套接字将该消息广播到其余活动浏览器? (也许我错过了一些东西)
伪代码示例(使用socket.io):
// client (browser)
socket.emit("message","my great message that will be received by all"
// server (any server can be, but let's just say that it is also written in JavaScript
socket.on("message", function(msg) {
socket.broadcast.emit(data);
});
// the rest of the browsers
socket.on("message", function(msg) {
// display on the screen the message
});
我个人认为 RabbitMQ 不应该用于聊天室。至少,不在应用程序的“聊天”或“房间”部分。
除非您的聊天室根本不关心历史记录 - 我认为大多数人确实关心这一点 - 像 RMQ 这样的消息队列没有多大意义。
你会过得更好将消息存储在数据库中 https://derickbailey.com/2015/09/21/how-to-do-user-notifications-from-rabbitmq-messages/并为每个用户保留一个标记,说明他们最后看到的消息是什么。
现在,您可能最终需要 RMQ 之类的东西来促进聊天应用程序的进程。例如,您可以从 Web 服务器卸载进程,并通过 RMQ 将所有消息推送到更新数据库和缓存层等后端服务。
这将使您能够更快地扩展前端 Web 服务器,并在每个 Web 服务器上支持更多用户。这听起来像是 RMQ 的一个很好的用途,但并不特定于聊天应用程序。这只是扩展网络应用程序/系统的好习惯。
根据我的经验,关键是 RMQ 不负责将消息传递给用户/聊天室。这是通过网络套接字或旨在为每个用户使用的类似技术实现的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)