我正在开发显示来自 Redis 的实时数据(图表等)的应用程序。更新的数据非常快(毫秒)进入 Redis。因此,尽可能频繁地显示更新是有意义的(只要人眼可以注意到它)。
技术栈:
- 节点.js作为 Web 服务器
- 保存数据的 Redis
- JavaScript/HTML (AngularJS) 作为客户端
现在我有客户端轮询(每秒查询 Redis 更新的服务器对 Node.js 的 GET 请求)。
改为执行服务器端轮询并通过 WebSocket 公开更新是否有优势?每个 WebSocket 连接都需要单独的 Node.js 轮询 (setInterval),因为客户端查询可能不同。但它预计不会有超过 100 个 WebSocket 连接。
这两种方法之间有什么优点/缺点吗?
如果我正确理解了您的问题:您将有不到 100 个用户同时使用您的资源,并且您想找出为他们提供更新的更好方法:
- 客户端通过超时请求请求更新(每秒 1 次)
- 服务器跟踪客户端,每当有更新时,它都会向它们发出更新。
我认为最好的解决方案取决于您拥有的数据以及用户获取这些数据的重要性。
如果出现以下情况,我会选择客户端:
- 人们不在乎他们的数据是否有点陈旧
- 在这 1 秒内大约有 1 次以上的更新
- 我没有时间修改代码
如果出现以下情况,我会选择服务器端:
- 拥有最新数据很重要,用户不能容忍滞后 更新
- 并不那么频繁(例如,如果我们每分钟只有一次更新,则只有 1/60 客户端请求是有用的。在这里服务器只会发布一次更新)
一件好事是node.js已经有一个很好的 socket.io 库来实现此目的。