实时与Node.js:WebSocket +服务器端轮询与客户端轮询
我正在开发显示来自Redis的实时数据(图表等)的应用程序。 更新的数据非常快(毫秒)。 因此,尽可能频繁地显示更新是有意义的(只要人眼可以注意到)。
技术堆栈:
- Node.js作为一个Web服务器
- Redis拥有这些数据
- JavaScript / HTML(AngularJS)作为客户端
现在我有客户端轮询(GET请求到Node.js服务器每秒查询Redis的更新)。
是否有做服务器端轮询的好处,并通过WebSocket暴露更新? 每个WebSocket连接将需要单独的Node.js轮询(setInterval),尽pipe由于客户端查询可能不同。 但预计不会有超过100个WebSocket连接。
这两种方法之间有什么优点/缺点?
如果我正确地理解了你的问题:你有不到100个用户同时使用你的资源,你想知道什么是更好的方法来给他们更新:
- 客户通过超时请求来请求更新(每秒1次)
- 服务器跟踪客户端,每当有更新时,都会向他们发送更新。
我认为最好的解决scheme取决于您拥有的数据,以及用户获取这些数据的重要性。
如果出现以下情况,我会和客户端一起去
- 人们不关心他们的数据是否有点陈旧
- 在这1秒内将会有大约1次以上的更新
- 我没有时间修改代码
我会去服务器端,如果:
- 有最新的数据和用户不能容忍滞后是非常重要的
- 更新并不经常(如果我们每分钟只更新一次,60个客户端请求中只有1个是有用的,而这里服务器只发布一个更新)
有一件好事就是node.js已经有了一个很好的socket.io库来达到这个目的。