4

興味深い問題: サーバー側を更新している MongoDb コレクションがあり、同じコレクションに Meteor クライアント側のフックがあります。mongo-cursor (サーバー側) で挿入されたレコードがクライアントに到達するまでに最大 10 秒の遅延があることに気付きました。

問題は次のとおりです。Meteor クライアントを介して (Chrome コンソールを介して) 同じ挿入を行うと、クライアントと接続されている他のすべての更新が 1 秒未満の応答時間で更新されます。

サーバー側の Mongo への挿入とクライアント側の挿入の間には非常に大きな違いがあります。クライアント側の挿入は、MongoDb シェルを介してドキュメントを手動で挿入する場合よりもはるかに迅速に伝達され、他のクライアントにプッシュされます。

これに関するアイデアはありますか?私は何かが欠けていると確信しています...

4

1 に答える 1

3

meteor mongo ドライバーは、Mongo の変更を 10 秒ごとにポーリングして、Meteor の外部から書き込まれたデータがクライアントに送信されるようにします。関連するソースコードは次のとおりです。

  // every once and a while, poll even if we don't think we're dirty,
  // for eventual consistency with database writes from outside the
  // Meteor universe
  var intervalHandle = Meteor.setInterval(
    _.bind(self._ensurePollIsScheduled, self), 10 * 1000 /* 10 seconds */);
    self._stopCallbacks.push(function () {
    Meteor.clearInterval(intervalHandle);
  });

コア開発者の 1 人である Matt Debergalis によると、この動作は変更される可能性があり ます。

このポーリングは、Meteor サーバー プロセスを経由していない DB の変更を Meteor が認識できるようにするためのものです。

ただし、多くのアプリではこれは必要ありません。無効にする方法を検討しています。ホッパーにもより効率的な実装があります。

于 2013-02-01T02:17:15.240 に答える