5

我正在开发显示来自 Redis 的实时数据(图表等)的应用程序。更新的数据很快(毫秒)到达 Redis。因此,尽可能频繁地显示更新是有意义的(只要人眼能注意到它)。

技术栈:

  • Node.js 作为 Web 服务器
  • 保存数据的 Redis
  • JavaScript/HTML (AngularJS) 作为客户端

现在我有客户端轮询(每秒向 Node.js 服务器发出 GET 请求,查询 Redis 以获取更新)。

进行服务器端轮询并通过 WebSocket 公开更新是否有优势?每个 WebSocket 连接都需要单独的 Node.js 轮询(setInterval),因为客户端查询可能不同。但预计不会有超过 100 个 WebSocket 连接。

这两种方法之间有什么优缺点吗?

4

1 回答 1

5

如果我正确理解了您的问题:您将同时使用您的资源的用户少于 100 个,并且您想找出更好的方法来为他们提供更新:

  • 客户端通过超时请求请求更新(每秒 1 个)
  • 服务器跟踪客户端,每当有更新时,它都会向他们发出更新。

我认为最好的解决方案取决于您拥有的数据以及用户获取这些数据的重要性。

如果出现以下情况,我会选择客户端:

  • 人们不在乎他们的数据是否有点陈旧
  • 在这 1 秒内大约会有 1 次以上的更新
  • 我没有时间修改代码

如果出现以下情况,我会选择服务器端:

  • 拥有最新数据很重要,用户不能容忍滞后
  • 更新不是那么频繁(例如,如果我们每分钟只有一次更新,那么 60 个客户端请求中只有 1 个有用。这里服务器只会发布一个更新)

一件好事是 node.js 已经为此目的提供了一个出色的socket.io库。

于 2013-11-03T03:31:51.450 回答