python - 与标准网络服务器一起扩展解耦的实时服务器

标签 python websocket real-time scalability

假设我有一个典型的 Web 服务器,为客户端提供标准 HTML 页面,还有一个与它一起运行的 Websocket 服务器,用于实时更新(聊天、通知等)。

我的一般工作流程是,当主服务器上发生某些事情触发需要实时消息时,主服务器将该消息发送到实时服务器(通过消息队列),然后实时服务器将其分发到任何相关连接。

我担心的是,如果我想扩大规模,并添加另一个实时服务器,似乎我唯一的选择是:

  1. 让主服务器跟踪客户端是哪个实时服务器 连接到。当该客户收到通知/聊天时 消息,主服务器将该消息转发到仅 客户端连接到的实时服务器。这里的缺点是 代码复杂性,因为主服务器必须做一些额外的工作 保持。
  2. 或者让主服务器简单地传递该消息 沿着每个实时服务器;只有客户端是服务器 连接到实际上会用它做任何事情。这会导致 许多浪费的消息被传递。

我在这里缺少另一个选择吗?我只是想确保我不会在其中一条道路上走得太远,并意识到我做的事情完全错误。

最佳答案

如果场景是

a) 主 Web 服务器在执行操作时发出消息(假设插入了一条记录) b ) 他通知适当的实时服务器

您可以通过使用中间发布/订阅架构将消息转发给目标收件人来解耦这两个步骤。

一个实现是

1) 您有一个 redis 发布-订阅 channel ,当客户端连接到实时套接字时,您开始在该 channel 中监听

2)当主应用想要通过实时服务器通知用户时,它会向 channel 推送一条消息,实时服务器获取消息并将其转发给目标用户。

这样,您就可以将实时通知与主应用程序解耦,并且不必跟踪用户所在的位置。

关于python - 与标准网络服务器一起扩展解耦的实时服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30114325/

相关文章:

python - Websockify 错误 - 地址已在使用中

使用 redis 的 django 聊天应用程序 - 订阅后我如何/在哪里将 "listen"发送到消息?

javascript - 使用 JQuery 从 Flask 获取 JSON 有时返回 null

python - TensorFlow Hub 模块可以在 TensorFlow 2.0 中使用吗?

python - 从列表中互斥随机抽样

c++ - C、C++ 与 Python 的接口(interface)

websocket - IBM Watson 语音到文本 API 中的 1006 错误代码

Go & Socket.io HTTP + WSS 在一个端口上与 CORS?

JAVA实时控制台-控制线程

linux - 如何在 Linux 中获得最准确的实时周期性中断?