Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获得有关使用SAIL的mongo集合中的外部更改的通知?_Javascript_Mongodb_Sails.js - Fatal编程技术网

Javascript 如何获得有关使用SAIL的mongo集合中的外部更改的通知?

Javascript 如何获得有关使用SAIL的mongo集合中的外部更改的通知?,javascript,mongodb,sails.js,Javascript,Mongodb,Sails.js,我正在开发一个基于mongo和sails的应用程序,我正在测试sails中的实时更新是如何工作的 我现在使用的是0.9.16帆,但我也对关于0.10帆的答案感兴趣 我希望在相应集合中创建新文档时更新列表。当我通过sails套接字添加文档并发送一条post消息时,这种方法就起作用了。在这种情况下,我看到其他客户端接收到一条消息,客户端上的列表被更新 mongo数据库上有一个外部服务,因此收集量一直在增长。数据库中由外部服务直接创建的新元素不会通知侦听客户端,因此我必须刷新网页以显示这些元素 问题:

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

我现在使用的是0.9.16帆,但我也对关于0.10帆的答案感兴趣

我希望在相应集合中创建新文档时更新列表。当我通过sails套接字添加文档并发送一条post消息时,这种方法就起作用了。在这种情况下,我看到其他客户端接收到一条消息,客户端上的列表被更新

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

问题:

  • 当数据库创建不是来自sails本身时,关于数据库创建的通知应该有效吗
  • 如果是,这是否需要一些特殊配置
  • 如果不是,当数据库发生更改时,建议使用什么方法来更新有关集合的客户端列表

干杯

这是一个非常有趣的问题,尽管不是一个不同寻常的问题:来自美国的男生也有同样的问题。基本上,如果不观察数据库,你甚至无法水平扩展你的应用程序,因为一个服务器进程不知道另一个服务器进程对数据做了哪些更改

因此,起初他们通过每10秒轮询一次数据库来修补它显然,这不是最好的解决方案,所以他们最终得到了另一个解决方案(这也适用于Sails):现在他们跟踪MongoDB,并在相应集合中发生更改时启动更新

也就是说,要回答您的问题:

  • AFAIK,Sails流程对数据库的任何外部更改没有任何线索
  • 因此,无需配置
  • 跟踪外部数据库(MongoDB)更新的一种方法是使用您可以在npm中找到的一个oplog观察程序(例如,或其中一个,等等)来侦听更改并在需要时触发更新

不幸的是,这里没有现成的解决方案,但我希望至少现在您对如何使其工作有了想法。

嘿,它工作起来很有魅力!谢谢!嗯,我现在有个问题,自动测试失败了。既然你是《桶》的作者,你可能会有一些我自己很难找到的建议。这里有一个专门的问题,关于如何使用sails套接字向客户机发出每次新创建的警报?在db中创建新记录时,您可以通过mongo watcher获得事件,但是如何将此事件发送到打开的套接字?下面的示例是对答案的注释,我将在这里复制它我得到了这个。我试过mongo watch,效果很好。我更关心的是出版创作部分。传入套接字如何通过publishCreate得到通知,以及服务器发送的异步事件如何在浏览器端处理?在接收我请求的控制器中,我完成了MYMODEL.subscribe(req.socket),但在执行MYMODEL.publishCreate(event.data)时;客户端上的套接字似乎没有接收事件。有什么想法吗?您不需要在控制器中使用
subscribe
,blueprint API就可以了,但是您必须在客户端上进行订阅,在集合中使用
get
,然后监听消息。不管怎样,我可以建议为这个问题提出一个新的问题