node.js - 自动更新持续打开的仪表板页面时的 Websocket、SSE 或 HTTP

标签 node.js websocket server-sent-events

我的应用程序是用 Angular (2+) 和 NodeJS 构建的。其中一个页面基本上是一个仪表板,显示公司当前的任务,该仪表板全天在电视上向公司员工显示。

  • 很少手动刷新或重新加载。
  • 工作人员每 5-10 分钟就会在另一台计算机上更新一次任务。
  • 任何任务更新后,仪表板上的任务都需要尽快更新。
  • 应用应在任务更新后更新仪表板时限制数据传输。

我最初尝试了 websocket,但遇到了连接可靠性问题,因为有时开发板永远不会更新,因为 websocket 会失去连接。我永远无法解决这个问题并了解到 websockets 可能不可靠。

目前,我只是每 15 秒运行一次 http 调用,以从后端检索一组新数据。但随着应用程序的扩展,数据传输的成本可能会很高。

我最近才听说SSE,但对此一无所知。

目前,我的下一个计划是设置“上次更新”状态检查,我仍然每 15 秒运行一次 http 调用,从前端传递“上次更新”时间,并将其与后端“上次更新”时间(每当任务更改时更新)进行比较,并且仅在前端时间过期时才返回数据,以减少数据传输。

这听起来是个好主意,还是我应该再次尝试 websockets 或 SSE?

最佳答案

I initially tried websockets but had a problem with connection reliability as sometimes the board would never get updated because the websocket would lose its connection.

处理连接丢失时的事件并重新连接。

I could never figure this problem out and read that websockets can be unreliable.

不要让你在互联网上读到的一些胡言乱语阻止你承认问题并解决它。 Web Sockets 和其他任何东西一样可靠。而且,就像其他事情一样,它们可能会断开连接。而且,与许多较新的 API 一样,它们将重新连接逻辑留给您……应用程序开发人员。如果您只是不想处理它,NPM 上有许多用于自动重新连接 Web 套接字的软件包,它们完全符合我的建议。他们处理断开连接的事件,并立即重新连接。

Currently I'm just running an http call every 15 seconds to retrieve a new set of data from the backend. But this can be costly with data transfer as the app scales.

可以,是的。

I've just recently heard about SSE but know nothing about it.

据我们对您的问题所知甚少,SSE 听起来是正确的选择。 SSE 最适合:

  • 事件数据
  • 可以以某种方式序列化为文本的数据(JSON 很好,但不要对大型二进制流进行 base64 编码,因为这样会使它们太大)
  • 单向消息,从服务器到客户端

大多数实现都会为您重新连接,如果确实发生断开连接,它甚至支持从中断处继续连接的方法。

关于node.js - 自动更新持续打开的仪表板页面时的 Websocket、SSE 或 HTTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52378066/

相关文章:

javascript - jQuery 和 Node.js 有什么区别?

angularjs - 在nodejs环回中安排一个cron作业

javascript - 等待多个 WebSocket 回调

node.js websocket.io 示例不起作用?

java - 如何过滤 Jersey SSE 中的事件?

spring - 服务器发送事件错误 : 406 (Not Acceptable) in Angular5 + Spring App

node.js - 需要 Heroku 上的文件

node.js - 添加服务的自定义端点 ( Feathersjs )

java - 不带注解的Tomcat实例添加ServerEndpoint

Python Flask,如何检测 SSE 客户端与前端 Javascript 断开连接