1

我有机会玩了一段时间这个工具,并制作了一个聊天应用程序,而不是一个 hello world。我的项目有 2 个流星应用程序共享同一个 mongo 数据库:

  • 客户
  • 操作员

当我从操作员控制台键入消息时,有时需要 7-8 秒才能显示给订阅的客户端。所以我的问题是......我可以从这颗流星中获得多少真实的时间?现在,我可以看到其他服务(例如 pubnub 或 pusher)的效果更好。

延迟是否应该来自它订阅同一个数据库的 2 个应用程序这一事实?

PS 我需要 2 个应用程序,因为客户端和操作员应用程序在设计和媒体库(css/jquery 插件等)方面完全不同,这是我发现使客户端应用程序更轻的唯一方法。

4

2 回答 2

2

如果您使用两个没有 DDP 的数据库,您的应用程序将无法实时运行。您应该使用一个完整的应用程序或使用 DDP 将消息中继到另一个实例(通过 Meteor.connect)

如果您想在服务器上进行订阅,这暂时是个问题,因为订阅还没有真正的服务器到服务器 ddp 支持。所以需要使用客户端进行订阅:

connection = Meteor.connect("http://YourOtherMetorInstanceUrl");

connection.subscribe("messages");

代替

Meteor.subscribe("messages");

在您的客户端应用程序中,当然使用与您在另一个流星实例上的相应发布功能相同的订阅名称

于 2013-06-08T16:32:08.747 回答
2

Akshat 的回答很好,但有更多解释:

当 Meteor 运行时,它会向集合中添加一个观察者,因此对该集合中数据的任何更改都会立即响应。但是,如果您有两个应用程序写入同一个数据库(这就是您同步数据的方式),那么观察者就没有到位。所以它不会是完全实时的。

但是,服务器会定期轮询数据库以查找外部更改,因此延迟 7-8 秒。

看起来您的应用程序是这样设计的,以克服 Meteor 目前所有客户端代码都交付给所有客户端的限制。解决这个问题在路线图上。

同时,除了 Akshat 的建议,我还建议使用 Meteor 方法插入消息。然后从客户端应用程序,使用Meteor.call('insertMessage', options ...通过DDP添加消息,这将保持应用程序的实时性。

您还想分离数据库。

于 2013-06-08T18:04:51.440 回答