为什么需要消息队列来与 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 或 Engine.IO 协议版本 错误

    我试图在树莓派 4 中使用flask socketio socketIO client 和 SOCKET IO 在 python 中运行客户端和服务器 但出现以下错误 The client is using an unsupported v
  • Socket.io 适用于 localhost,但不适用于 Heroku 服务器

    我目前正在尝试使用socket io 和node js 服务器与Unity 脚本进行通信 我已将所有内容连接起来并与 localhost 一起使用 但由于某种原因 当我将其移植到 Heroku 服务器时 它无法连接 我假设它可能与 URL
  • Node.js:从 jpeg 图像到视频文件的实时转换

    我正在使用node js 并通过socket io 库接收实际上是jpeg 图像的数据块 这些图像是从远程网络摄像头捕获的实时视频帧 我被迫将视频作为 jpeg 帧进行流式传输 我正在寻找一种方法来动态转换视频文件 mpeg 4 或 mjp
  • Laravel 中的 Socket.io 轮询 404

    我正在尝试使用 Socket io 实现一个聊天应用程序 进入我的 Laravel 应用程序 聊天应用程序本身运行良好 但我在 Laravel 中遇到问题 我尝试在端口 8000 上提供 Laravel 服务 并在 8000 上提供聊天服务
  • Laravel Echo - 允许访客连接到状态通道

    我正在使用 laravel echo server 运行 Laravel Echo 来广播事件 我有一个用户计数器频道 显示应用程序上的所有用户 为此 我使用了存在通道 这对于登录用户来说效果很好 但访客永远无法连接 我在 Broadcas
  • 如何从不同的主机连接到socket.io服务器?

    我有一个网站说mydomain home php 现在我已经设置了一个NodeJs服务器说在23 23 234 22 主页 home 是一个get路线 我已经写了代码套接字 io服务器 最后服务器正在运行 现在我想编写客户端代码home p
  • msgget() 和 mq_open 之间的区别

    我阅读了有关消息队列操作的信息 例如 msgget msgsnd 和 msgrcv 但是当我在堆栈溢出上搜索消息队列相关问题时 我发现还有另一组消息队列操作 例如 mq open mq send mq receive 谁能告诉我这两种类型的
  • RabbitMQ 上的 Nack 和拒绝

    我想处理消费者从队列中获取的不成功的消息并将它们重新排队 想象一下我有这样的情况 P gt foo bar baz gt C 其中 foo bar 和 baz 是消息 如果消费者读到baz但出了问题 我可以使用basic reject or
  • 我应该使用全局变量在整个服务器上共享 socket.io 实例吗

    以下是我的 node js 应用程序中的 server js 文件 我希望我的 socket io 实例能够被服务器上的其他文件访问 以便从我的 API 发出事件 listingRoutesApi userRoutesApi etc ref
  • 定义具有多种消息类型的消息传递域

    到目前为止 我见过的大多数 F 消息传递示例都使用 2 4 种消息类型 并且能够利用模式匹配将每条消息定向到其正确的处理函数 对于我的应用程序 由于处理和所需参数的不同性质 我需要数百种独特的消息类型 到目前为止 每个消息类型都是其自己的记
  • 允许在 Google 计算引擎 (GCE) 中使用 WebSocket

    我正在使用计算引擎 GCE 通过 Socket IO Node js 运行我的套接字服务器 它仅适用于轮询 当我尝试使用网络客户端时 我收到以下错误代码 WebSocket connection to ws myapp socket app
  • 与 Socket.io 保持连接

    我正在尝试使用 asterisk websocket 连接socket io 客户端 https github com socketio socket io client socket io connect url transports w
  • 在 socket.on() 的回调上调度操作

    所以基本上我得到了这个套接字 它工作正常 向我发送 新订单 消息 我正在使用 redux 并且我想分派一个操作 然后减速器会得到它并且我的商店将会更新 但这段代码没有做任何事情 socket on new order order gt re
  • 在 Celery 工作线程中捕获 Heroku SIGTERM 以优雅地关闭工作线程

    我对此进行了大量研究 令我惊讶的是我还没有在任何地方找到一个好的答案 我正在 Heroku 上运行一个大型应用程序 并且我有某些运行很长时间处理的 celery 任务 并在任务结束时保存结果 每次我在 Heroku 上重新部署时 它都会发送
  • SocketIO ERR_CONNECTION_REFUSED

    我开始使用 NodeJS 和 Socket IO 我正在尝试使用 NodeJS http 服务器设置一个基本示例 并建立到服务器的 Socket IO 连接 我也在使用 Angular JS 基本上我想要的是 当用户按下按钮时 就会建立与服
  • Android 为多个活动存储 Socket.io 对象

    我正在制作我的第一个基于 Socket io 的 Android 应用程序 套接字从 Web 服务发送和接收数据 应用程序中有许多屏幕用于不同的功能 我如何在这些不同的活动中使用相同的套接字连接 我尝试在 Application 类中设置和
  • Django/gevent socket.IO 与 redis pubsub。我把东西放在哪里?

    我有一个独立的 python 脚本 它只是从 Twitter 的流 API 捕获数据 然后在收到每条消息时 使用 redis pubsub 将其发布到频道 tweets 这是该脚本 def main username username pa
  • Python 中的 Socket.IO 客户端库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 谁能推荐一个 Python 的 Socket IO 客户端库 我环顾四周 但我能找到的唯一的要么是服务
  • Erl 无法连接到本地 EPMD。为什么?

    Erlang R14B04 erts 5 8 5 source 64 bit rq 1 async threads 0 kernel poll false Eshell V5 8 5 abort with G root ip 10 101
  • RabbitMQ - 如何死信/处理过期队列中的消息?

    我有一个队列x expires放 我遇到的问题是我需要对队列中的消息进行进一步处理IF队列过期 我最初的想法是设置x dead letter exchange在队列中 但是 当队列过期时 消息就会消失而不会进入死信交换 如何处理死信或以其他

随机推荐