【问题标题】:How to get notified about external changes in a mongo collection with sails?如何在带有帆的 mongo 集合中获得有关外部更改的通知?
【发布时间】:2014-04-15 12:34:56
【问题描述】:

我正在开发一个基于 mongo 和sails 的应用程序,我正在测试sails 中的实时更新是如何工作的。

我现在使用sails 0.9.16,但我也对sails 0.10的答案感兴趣。

我希望在相应集合中创建新文档时更新列表。当我通过 Sails 套接字添加文档并发送帖子消息时,此方法有效。在这种情况下,我看到其他客户端收到一条消息,并且客户端的列表已更新。

有一个外部服务写在 mongo 数据库上,所以集合一直在增长。由数据库中的外部服务直接创建的新元素不会通知监听客户端,因此我必须刷新网页才能显示这些元素。

问题:

  • 当这些创建不是来自sails 本身时,有关数据库创建的通知是否应该起作用?
  • 如果是,是否需要一些特殊配置?
  • 如果不是,当数据库发生变化时,什么是推荐的方法来保持有关集合的客户端列表更新?

干杯

【问题讨论】:

  • 关于如何使用sails socket 提醒客户端每个新创建的示例?当在 db 中创建新记录时,您会使用 mongo-watcher 获取事件,但是如何将此事件发送到打开的套接字?
  • 示例在下面答案的评论中,我将它复制到这里github.com/sourcefabric-innovation/citizendesk-interface/commit/…
  • 我得到了这个。我试过 mongo-watch ,这工作正常。我更关心的是 publishCreate 部分。什么是能够通过 publishCreate 通知的传入套接字以及如何在浏览器端处理服务器发送的异步事件?
  • 在收到我的请求的控制器中,我做了一个 MYMODEL.subscribe(req.socket),但是当我在做 MYMODEL.publishCreate(event.data);客户端的套接字似乎没有收到事件。有什么想法吗?
  • 您不需要在控制器中使用subscribe,蓝图API 可以,但是您必须在客户端上订阅,在集合上使用get,然后监听消息。无论如何,我只能建议为此提出一个新问题

标签: javascript mongodb sails.js


【解决方案1】:

非常有趣的问题,虽然不是一个不寻常的问题:来自Meteor 的人也有同样的问题。基本上,如果不查看数据库,您甚至无法水平扩展您的应用程序,因为一个服务器进程将不知道另一个服务器进程对数据进行了哪些更改。

所以,起初他们通过每 10 秒轮询一次数据库来修补它。 :) 显然,这不是最好的解决方案,所以他们最终选择了另一个解决方案(这也适用于 Sails):现在他们正在跟踪 MongoDB oplog,并在相应集合发生变化时触发更新。

也就是说,回答你的问题:

  • AFAIK,Sails 进程不知道对数据库所做的任何外部更改;
  • 所以,无需配置;
  • 跟踪外部数据库 (MongoDB) 更新的一种方法是使用您可以在 npm 中找到的一个 oplog 观察程序(例如 this 或 these 之一等)来监听更改并在任何时候触发更新有需要。

很遗憾,这里没有现成的解决方案,但我希望至少现在您对如何使其工作有所了解。

【讨论】:

猜你喜欢
  • 2015-12-10
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2012-06-21
  • 2011-06-01
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多