为什么需要消息队列来与 Web 套接字聊天?

2024-04-08

我在互联网上看到了很多使用 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(使用前将#替换为@)

为什么需要消息队列来与 Web 套接字聊天? 的相关文章

  • 使用 Socket.io 向多个房间发送消息?

    是否可以使用socket io向多个房间发送消息 发送至 1 个房间 io sockets in room emit id 发送到N个房间 io sockets in room1 room2 roomN emit id 是的 可以同时发送到
  • Rabbit mq - 等待 Mnesia 表时出错

    我已经在 Kubernetes 集群上使用 Helm Chart 安装了 RabbitMQ rabbitmq pod不断重新启动 在检查 pod 日志时 我收到以下错误 2020 02 26 04 42 31 582 warning lt
  • 如何将中间件绑定到socket.io中的事件

    现在您可以将中间件绑定到io use middleware 但这仅在建立套接字连接时触发 有没有办法在将其传递给事件句柄之前拦截它 就像在expressjs中一样 换句话说 In 快递 js你可以做 app get middleware1
  • ECONNREFUSED:无法连接到集群内默认端口上的 RabbitMQ pod

    我的本地集群中有一个运行 RabbitMQ 的 pod 我已经将其配置为 apiVersion v1 kind Service metadata name service rabbitmq spec selector app service
  • 如何清除node.js中的超时

    您好 我们正在使用 node js socket io 和 redis 开发应用程序 我们有这个程序 exports processRequest function request result var self this var time
  • 检查 Unix 消息队列是否为空

    谁能告诉我如何检查消息队列中是否有消息 消息队列是在基于Linux的操作系统中用C语言实现的 我只是想检查在特定时间消息队列中是否有消息 只需使用以下命令即可检查消息数量 如果有 msgctl 函数 并在返回时检查 msqid ds 结构
  • Apache Kafka 是否提供异步订阅回调 API?

    我的项目正在将 Apache Kafka 视为老化的基于 JMS 的消息传递方法的潜在替代品 为了让这个过渡尽可能的顺利 如果替代的排队系统 Kafka 有一个异步订阅机制那就更理想了 类似于我们当前项目使用的JMS机制MessageLis
  • Android 中所有活动的单套接字 IO 连接

    我已经为 SocketIOClient 参考创建了 Singleton 类here https stackoverflow com questions 13709783 android socket io switch activities
  • 如何在socket.io Nodejs服务器上列出房间

    在问题取得进展后如何创建socket io多播组 https stackoverflow com questions 6616922 how to create socket io multicast groups 6624604 6624
  • RabbitMQ 中 Pub/Sub 与工作队列的混合

    我正在评估使用 RabbitMQ 作为消息队列 消息总线 并一直在查看示例教程 https www rabbitmq com getstarted html在 RabbitMQ 页面上 我正在寻找教程中未涵盖的特定场景 并且我不确定是否以及
  • 公共交通错误队列正在消耗,但仍然不为空

    我正在使用 Mastransit 3 5 0 和 RabbitMq 如果队列消费者抛出异常 则默认由 MoveExceptionToTransportFilter 处理异常并移至 error 队列 对于 error 队列 我有单独的消费者
  • 从项目中的任何位置获取socket.io名称空间

    在我的 REST 调用和一些数据库插入之后 我想通过 socket io 向前端发出一个新的通知 如下所示 socket broadcast emit send notification notification 由于我执行此操作的函数是通
  • 像 AMQP 这样的面向消息的中间件在哪些领域有用?

    MOM 面向消息的中间件 解决什么问题 可扩展性 一体化 它们通常在哪些领域使用以及它们通常在哪些领域not used 例如 Google 是否将此类解决方案用于其主要搜索引擎或为 GMail 提供支持 沃尔玛 eBay FedEx 几乎是
  • 理解react-hooks/exhaustive-deps useEffect和调度事件

    我有这个警告 React Hook useEffect has a missing dependency dispatch Either include it or remove the dependency array react hoo
  • socket.io 自动断开套接字

    当我在电子中运行 socket io 时 我不断在开发者控制台中收到此错误 engine io client socket probe transport websocket failed because of error transpor
  • 可以模拟多个并发连接来测试 Nodejs 应用程序

    我有一个简单的node js socket io websockets 应用程序运行 localhost 我想看看它可以处理多少并发连接 是否可以在本地主机本身上模拟多个并发用户 这是我使用 socket io client 的半生尝试 f
  • RabbitMQ + Windows + LDAP 无需发送密码

    我正在尝试在 Windows 7 上使用 RabbitMQ 3 6 2 进行 LDAP 身份验证 授权 我已经在应用程序发送用户名 密码的情况下进行了基本身份验证 但密码位于我需要弄清楚如何进行的代码中避免 有没有人在不提供密码的情况下成功
  • 在 Spring 中设计复杂的通知系统

    我想设计和实现一个复杂的通知系统 其中我有一个用户将自动和手动订阅不同的事件 经过一番研究后 我决定使用 websockets 将通知推送到客户端 并订阅事件 我会选择 RabbitMQ 特别是直接交换 最初的想法是 在建立 websock
  • 如何与Socket.io连接?雨燕4

    我已阅读最新文档 https github com socketio socket io client swift of Socket io对于斯威夫特 还有一个新连接的示例 let manager SocketManager socket
  • WebSocket如何压缩消息?

    JSON stringify 显然空间利用率不高 例如 123456789 123456789 占用 20 多个字节 而它可能只需要大约 5 个字节 websocket 在发送到流之前是否会压缩其 JSON WebSocket 的核心只是一

随机推荐