使用 websockets 从工作服务器更新数据?

Posted

技术标签:

【中文标题】使用 websockets 从工作服务器更新数据?【英文标题】:Use websockets to update data from worker servers? 【发布时间】:2020-09-20 00:42:01 【问题描述】:

我有一个运行 expressjs 的服务器来托管管理网站和 4 到 10 个额外的工作服务器,这些服务器运行一个作业调度程序并不断处理作业和接收新数据。有没有好办法让工作服务器通知网站服务器,然后使用 websockets 更新网站上的数据?

【问题讨论】:

确保 socket.io 在服务器端工作,如果这是您的要求,他们可以连接到 admin 服务器(或 127.0.0.1 等,如果在单个服务器上和/或使用 eventemitter,如果在同一个进程上启动)并且可以向 ui 发出事件 @LawrenceCherone 但如何将更新从其中一台工作服务器发送到网络服务器,然后再发送到浏览器? 每个工作服务器都将连接到管理员,与浏览器客户端完全相同,您唯一需要弄清楚的是识别每个工作人员,但这可能是通过传递的参数进行连接 @LawrenceCherone 好的,谢谢。那么服务器可以使用 websockets 连接到服务器吗?是否有任何库、ws、socketio 等对此有更好的支持? 【参考方案1】:

工作服务器可以使用多种方式与您的主服务器进行通信。例如,您的主服务器可能在您的主服务器中有一个特殊的 Web 服务器(不暴露给外界),它只接收来自工作人员的带有数据的 http 请求。因此,每当一个工作人员获得新数据时,它只是向主服务器发送一个 http 请求。

或者,webSocket 或 socket.io 都可以很好地用于服务器到服务器(一端用作建立连接的客户端),另一端是 webSocket/socket.io 服务器侦听传入连接。在您的情况下,工作人员将是客户端,他们将连接到您的主服务器,然后他们可以随时通过 webSocket 或 socket.io 连接发送数据。

如果您想在打开了您的某个页面的各种 Web 浏览器中自动更新数据,那么这些页面也将打开到您的服务器的 webSocket 或 socket.io 连接,因此当您的服务器获取新数据时,它可以告诉网页有关它的信息,网页可以更新其显示,而无需不断刷新/重新加载新页面。

可以使用ws或socket.io。 Socket.io 提供了许多基于 webSocket 构建的功能。如果您想要这些附加功能,您会选择 socket.io。您可以在此处查看添加的 socket.io 功能的部分列表:

Moving from socket.io to raw websockets?

【讨论】:

以上是关于使用 websockets 从工作服务器更新数据?的主要内容,如果未能解决你的问题,请参考以下文章

Django:通过 websocket 定期发送更新

将 WebSocket 移入工作线程的原因 [关闭]

从 websocket 更新数据时闪烁或闪烁文本

从路由中发出 websocket 消息

我对使用 WebSockets 自动更新网站有点困惑

让 WebSocket 从远程 URL 工作