【问题标题】:Using socket.io to replace polling mechanism against Mongodb使用 socket.io 替换针对 Mongodb 的轮询机制
【发布时间】:2014-01-13 16:37:00
【问题描述】:

我正在开发一个使用 Mongodb 和 Nodejs 的应用程序。还有另一个用于收集数据和更新 Mongodb 的外部 Web 服务。我想有一种方法可以在网页中自动发布这些更改,而无需进行实际轮询。目前,我正在使用 socket.io 中的轮询机制将更改推送到 UI。是否可以通过使用 socket.io 从 Mongodb 自动发布更改来刷新 UI?

【问题讨论】:

    标签: node.js mongodb socket.io


    【解决方案1】:

    因此无法控制 Web 服务,它是一个将数据上传到 mongo 的外部应用程序。

    MongoDB为新数据提供了一种特殊的轮询方式,不涵盖现有数据被修改的情况。

    这种对新数据的优化轮询可以通过结合 MongoDB 的 capped collections 和 tailable cursors 功能来实现。这是blog post of how to do itcode example

    所以实现您提到的方法是通过轮询,并且这种优化仅适用于新数据的情况。

    如果可以访问上传网络服务:

    对于不使用服务器 socket.io push 进行轮询的解决方案,您需要使上传 Web 服务在同一节点进程中运行,并从保存在 Mongo 调用 io.sockets.emit('yourChannel', newData); 中的回调中,将新数据广播到所有浏览器客户端。

    【讨论】:

    • 我想你没有得到这个问题。可能是我解释的不对。您刚才描述的我们如何使用 socket.io,只是更新 UI 的确切过程。但是,我们的问题是 - 一些外部应用程序(不一定是 Web)更新数据库(mongodb)。 Socket.IO 通过每 10 秒对数据库进行一次轮询来更新 UI,以查看数据是否已更改并将更改推送到客户端。真正的问题是 - 是否需要每 10 秒对 mongodb 进行轮询,或者是否有更智能的方法来自动通知 mongodb 中的更改?
    • 好的,我已经根据那个修复了答案
    • 我也倾向于使用 Mongodb 的 cap 集合和 tailable 游标。但有趣的是,还有一件事引起了我的注意——Monitoring Oplogs attachable cursor。这样,我们就可以实现我们想要的插入、更新和删除。如果我在这方面取得了成功,那就在这里广为人知吧。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2015-05-11
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    相关资源
    最近更新 更多