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