我有两个流星应用程序通过不同服务器上的 DDP 连接,服务器 A 将数据发送到服务器 B。这就是它们的工作方式。
Server A
Items = new Meteor.Collection('items');
Items.insert({name: 'item 1'});
if (Meteor.isServer) {
Meteor.publish('items', function() {
return Items.find();
});
}
Server 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);
}
});
每次我打电话Items.insert(something)
在服务器 A 上,在服务器 B 上,我在控制台上看到了我在服务器 A 上保存的对象的日志。但是,如果服务器 B 失去了 Internet 连接,则当服务器 B 重新连接到 Internet 时,服务器 A 上插入的数据将不再出现在服务器 B 上。
服务器B通过路由器连接到Internet。仅当我断开并重新连接路由器时才会出现此问题,而不是当我断开服务器与路由器的连接并重新连接时会出现此问题。两台服务器位于不同的网络上并通过 Internet 连接。
我在服务器 B 上创建了一个计时器来调用remote.status()
但总是得到{ status: 'connected', connected: true, retryCount: 0 }
连接或断开互联网时。
更新:重现步骤
我在github上创建了一个项目,其中包含测试代码https://github.com/camilosw/ddp-servers-test。服务器A安装在http://ddpserverstest-9592.onmodulus.net/
我的计算机通过无线电缆调制解调器连接到互联网。
- 在 server-b 文件夹上运行 mrt
- Go to http://ddpserverstest-9592.onmodulus.net/然后单击链接“插入”(您可以单击“删除”以删除所有以前的插入)。您必须在本地控制台上看到一条包含已添加项目的消息。
- 关闭计算机上的无线并再次单击插入链接。 (您需要点击另一台可以上网的电脑,我使用智能手机点击链接)
- 打开计算机上的无线。您必须在本地控制台上看到一条包含第二项的消息。
- 现在,关闭电缆调制解调器并再次单击插入链接。
- 打开电缆调制解调器。这次,新项目没有出现在控制台上。
我还使用 Android 智能手机使用通过无线方式将互联网共享到我的计算机的选项来完成此操作。首先,我关闭并打开计算机上的无线网络并正常工作。然后我关闭并打开智能手机上的互联网连接,我遇到了同样的问题。
Update 2
我的办公室有两个无线路由器。我发现如果我在路由器之间移动也会发生同样的问题。