假设我有一个典型的 Web 服务器,为客户端提供标准 HTML 页面,还有一个与它一起运行的 Websocket 服务器,用于实时更新(聊天、通知等)。
我的一般工作流程是,当主服务器上发生某些事情触发需要实时消息时,主服务器将该消息发送到实时服务器(通过消息队列),然后实时服务器将其分发到任何相关连接。
我担心的是,如果我想扩大规模,并添加另一个实时服务器,似乎我唯一的选择是:
- 让主服务器跟踪客户端是哪个实时服务器 连接到。当该客户收到通知/聊天时 消息,主服务器将该消息转发到仅 客户端连接到的实时服务器。这里的缺点是 代码复杂性,因为主服务器必须做一些额外的工作 保持。
- 或者让主服务器简单地传递该消息 沿着每个实时服务器;只有客户端是服务器 连接到实际上会用它做任何事情。这会导致 许多浪费的消息被传递。
我在这里缺少另一个选择吗?我只是想确保我不会在其中一条道路上走得太远,并意识到我做的事情完全错误。
最佳答案
如果场景是
a) 主 Web 服务器在执行操作时发出消息(假设插入了一条记录) b ) 他通知适当的实时服务器
您可以通过使用中间发布/订阅架构将消息转发给目标收件人来解耦这两个步骤。
一个实现是
1) 您有一个 redis 发布-订阅 channel ,当客户端连接到实时套接字时,您开始在该 channel 中监听
2)当主应用想要通过实时服务器通知用户时,它会向 channel 推送一条消息,实时服务器获取消息并将其转发给目标用户。
这样,您就可以将实时通知与主应用程序解耦,并且不必跟踪用户所在的位置。
关于python - 与标准网络服务器一起扩展解耦的实时服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30114325/