我有机会使用这个工具一段时间了,并制作了一个聊天应用程序,而不是一个hello world。我的项目有2个流媒体应用程序共享相同的mongo数据库:
当我从操作员控制台键入消息时,有时需要7-8秒才能显示订阅的客户端。所以我的问题是......我可以从这颗流星中获得多少实时时间?现在,我可以通过pubnub或pusher等其他服务看到更好的结果。
延迟是否应该来自2个应用程序订阅同一个数据库的事实?
P.S。我需要2个应用程序,因为客户端和操作员应用程序完全不同,主要是设计和媒体库(css / jquery插件等),这是我发现使客户端应用程序更轻松的唯一方法。
答案 0 :(得分:2)
如果您使用两个没有DDP的数据库,您的应用程序将无法实时运行。您应该使用一个完整的应用程序或使用DDP将消息中继到另一个实例(通过Meteor.connect)
如果您想在服务器上进行订阅,目前这是一个问题,因为尚未实现服务器到服务器的ddp支持。因此,您需要使用客户端进行订阅:
connection = Meteor.connect("http://YourOtherMetorInstanceUrl");
connection.subscribe("messages");
而不是
Meteor.subscribe("messages");
在您的客户端应用程序中,当然使用与您在另一个流星实例上的相应发布功能相同的订阅名称
答案 1 :(得分:2)
Akshat的答案很好,但对原因有更多的解释:
当Meteor正在运行时,它会向集合中添加observer,因此对该集合中的数据所做的任何更改都会立即被动。但是,如果您有两个应用程序写入同一个数据库(这就是您同步数据的方式),则观察者不在位。所以它不会完全是实时的。
但是,服务器会定期轮询数据库以查找外部更改,因此延迟7-8秒。
看起来您的应用程序是以这种方式设计的,以克服Meteor现在所有客户端代码交付给所有客户端的限制。修复此问题的方法是roadmap。
与此同时,除了Akshat的建议外,我还建议使用Meteor方法插入消息。然后,从客户端应用程序,使用Meteor.call('insertMessage', options ...
通过DDP添加消息,这将使应用程序保持实时。
您还希望将数据库分开。