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

时间:2013-11-03 01:08:07

标签: javascript node.js websocket redis real-time

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

技术堆栈:

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

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

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

这两种方法之间的优缺点是什么?

1 个答案:

答案 0 :(得分:5)

如果我正确理解了您的问题:您只有不到100个用户同时使用您的资源,并且您想知道什么是更好的方式来为他们提供更新:

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

我认为最佳解决方案取决于您拥有的数据以及用户获取此数据的重要程度。

如果符合以下情况,我会选择客户端:

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

我会选择服务器端if:

  • 拥有最新数据非常重要,用户无法忍受滞后
  • 更新不常见(例如,我们每分钟只更新一次,60个客户端请求中只有一个会有用。此处服务器只发出一次更新)

有一件好事是node.js已经有了一个很好的socket.io库用于此目的。