【发布时间】:2014-01-13 16:37:00
【问题描述】:
我正在开发一个使用 Mongodb 和 Nodejs 的应用程序。还有另一个用于收集数据和更新 Mongodb 的外部 Web 服务。我想有一种方法可以在网页中自动发布这些更改,而无需进行实际轮询。目前,我正在使用 socket.io 中的轮询机制将更改推送到 UI。是否可以通过使用 socket.io 从 Mongodb 自动发布更改来刷新 UI?
【问题讨论】:
我正在开发一个使用 Mongodb 和 Nodejs 的应用程序。还有另一个用于收集数据和更新 Mongodb 的外部 Web 服务。我想有一种方法可以在网页中自动发布这些更改,而无需进行实际轮询。目前,我正在使用 socket.io 中的轮询机制将更改推送到 UI。是否可以通过使用 socket.io 从 Mongodb 自动发布更改来刷新 UI?
【问题讨论】:
因此无法控制 Web 服务,它是一个将数据上传到 mongo 的外部应用程序。
MongoDB为新数据提供了一种特殊的轮询方式,不涵盖现有数据被修改的情况。
这种对新数据的优化轮询可以通过结合 MongoDB 的 capped collections 和 tailable cursors 功能来实现。这是blog post of how to do it 和code example。
所以实现您提到的方法是通过轮询,并且这种优化仅适用于新数据的情况。
如果可以访问上传网络服务:
对于不使用服务器 socket.io push 进行轮询的解决方案,您需要使上传 Web 服务在同一节点进程中运行,并从保存在 Mongo 调用 io.sockets.emit('yourChannel', newData); 中的回调中,将新数据广播到所有浏览器客户端。
【讨论】: