2

異なるサーバー上で DDP を介して接続された 2 つの流星アプリケーションがあり、サーバー A がサーバー B にデータを送信します。これが動作方法です。

サーバーA

Items = new Meteor.Collection('items');
Items.insert({name: 'item 1'});
if (Meteor.isServer) {
  Meteor.publish('items', function() {
    return Items.find();
  });
}

サーバー B

var remote = DDP.connect('http://server-a/');
Items = new Meteor.Collection('items', remote); 

remote.subscribe('items');
Items.find().observe({
  added: function(item) {
    console.log(item);
  }
});

サーバー Aを呼び出すたびにItems.insert(something)、サーバー BI でサーバー A に保存したオブジェクトのログがコンソールに記録されます。しかし、サーバー B がインターネット接続を失った場合、サーバー A に挿入されたデータはサーバー B に表示されなくなります。インターネットに再接続します。

サーバー B は、ルーターを介してインターネットに接続されています。この問題は、ルーターからサーバーを切断して再接続したときではなく、ルーターを切断して再接続したときにのみ発生します。両方のサーバーは異なるネットワーク上にあり、インターネット経由で接続されています。

サーバーBにタイマーを作成しましたが、インターネットに接続または切断されたときにremote.status()常に呼び出します。{ status: 'connected', connected: true, retryCount: 0 }

更新: 再現手順

テスト コードhttps://github.com/camilosw/ddp-servers-testを使用して github にプロジェクトを作成しました。サーバー A はhttp://ddpserverstest-9592.onmodulus.net/にインストールされています

私のコンピュータは、ワイヤレス ケーブル モデムを介してインターネットに接続されています。

  1. server-b フォルダーで mrt を実行する
  2. http://ddpserverstest-9592.onmodulus.net/に移動し、[挿入] リンクをクリックします (以前の挿入をすべて削除するには、[削除] をクリックします)。アイテムが追加されたメッセージがローカル コンソールに表示されるはずです。
  3. コンピューターのワイヤレスをオフにして、挿入リンクをもう一度クリックします。(インターネットにアクセスできる別のコンピューターでクリックする必要があります。私はスマートフォンを使用してリンクをクリックしました)
  4. コンピューターのワイヤレスをオンにします。ローカル コンソールに 2 番目の項目のメッセージが表示されます。
  5. ここで、ケーブル モデムの電源を切り、挿入リンクをもう一度クリックします。
  6. ケーブル モデムの電源を入れます。今回は、新しいアイテムがコンソールに表示されません。

また、ワイヤレス経由でコンピューターとインターネットを共有するオプションを使用して、Android スマートフォンでも実行しました。最初に、コンピューターのワイヤレスをオフにしてからオンにし、正しく機能しました。その後、スマートフォンのインターネット接続をオフにしてからオンにすると、同じ問題が発生しました。

更新 2

オフィスに無線ルーターが 2 台あります。ルーター間を移動すると、同じ問題が発生することがわかりました。

4

3 に答える 3

2

コレクションに DDP 接続オブジェクトを正しく渡していないと思います。試してください:

var remote = DDP.connect('http://server-a/');
Items = new Meteor.Collection('items', { connection: remote }); 

Meteor はクライアント上で接続/コレクションの同じ API を提供するため (制御フローを除く)、これらすべての接続ゲームを最初にブラウザー コンソールから試すことがデバッグに役立つ場合があります。Meteor アプリケーションを開いて、コンソールからこの行を試してみてください。

于 2013-10-26T20:50:46.340 に答える