異なるサーバー上で 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/にインストールされています
私のコンピュータは、ワイヤレス ケーブル モデムを介してインターネットに接続されています。
- server-b フォルダーで mrt を実行する
- http://ddpserverstest-9592.onmodulus.net/に移動し、[挿入] リンクをクリックします (以前の挿入をすべて削除するには、[削除] をクリックします)。アイテムが追加されたメッセージがローカル コンソールに表示されるはずです。
- コンピューターのワイヤレスをオフにして、挿入リンクをもう一度クリックします。(インターネットにアクセスできる別のコンピューターでクリックする必要があります。私はスマートフォンを使用してリンクをクリックしました)
- コンピューターのワイヤレスをオンにします。ローカル コンソールに 2 番目の項目のメッセージが表示されます。
- ここで、ケーブル モデムの電源を切り、挿入リンクをもう一度クリックします。
- ケーブル モデムの電源を入れます。今回は、新しいアイテムがコンソールに表示されません。
また、ワイヤレス経由でコンピューターとインターネットを共有するオプションを使用して、Android スマートフォンでも実行しました。最初に、コンピューターのワイヤレスをオフにしてからオンにし、正しく機能しました。その後、スマートフォンのインターネット接続をオフにしてからオンにすると、同じ問題が発生しました。
更新 2
オフィスに無線ルーターが 2 台あります。ルーター間を移動すると、同じ問題が発生することがわかりました。