Ali*_*can 6 message-queue rabbitmq socket.io
我在互联网上看到很多使用网络套接字和RabbitMQ(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
});
Run Code Online (Sandbox Code Playgroud)
简单的回答...
对于一个简单的聊天应用程序,您不需要队列(例如,signalr 将在没有队列的情况下执行此操作)。
通常,虽然现实世界的应用程序不仅仅是“一个简单的聊天应用程序”,但队列可能代表新用户加入的房间的当前状态,因此服务器知道发生这种情况时要提供的消息列表。
另外值得注意的是,当您想要可靠的消息传递(例如服务总线)时,通常会实现消息队列,以确保即使第一次尝试失败,所有消息也确实到达它们应该去的地方。因此,队列很可能包含在许多示例中,作为以后解决问题的默认入门。
我个人认为RabbitMQ不应该用于聊天室.至少,不是在应用程序的"聊天"或"房间"部分.
除非你的聊天室根本不关心历史 - 我认为大多数人都关心这一点 - 像RMQ这样的消息队列没有多大意义.
你最好将消息存储在数据库中,并为每个用户保留一个标记,说出他们上次看到的消息.
现在,您可能最终需要像RMQ这样的东西来促进聊天应用程序的过程.例如,您可以从Web服务器卸载进程,并将所有消息通过RMQ推送到更新数据库和缓存层的后端服务.
这将允许您更快地扩展前端Web服务器,并为每个Web服务器支持更多用户.这听起来好像是使用RMQ,但不是特定于聊天应用程序.这只是扩展Web应用程序/系统的好习惯.
根据我的经验,关键是RMQ不负责将消息传递给用户/聊天室.这通过设计为每个用户使用的websockets或类似技术发生.
| 归档时间: |
|
| 查看次数: |
5429 次 |
| 最近记录: |