Node.js的实时:WebSocket +服务器端轮询与客户端轮询

web*_*dev 5 javascript real-time websocket redis node.js

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

技术堆栈:

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

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

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

这两种方法之间的利弊是什么?

Sal*_*ali 5

如果我理解你的问题:你有不到100个用户同时使用你的资源,你想知道什么是更好的方式给他们更新:

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

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

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

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

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

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

一个好处是node.js已经为此提供了一个优秀的socket.io库.