20

我收到以下错误:

连接超时。没有收到心跳。

访问我的流星应用程序 ( http://127.0.0.1:3000) 时。该应用程序已移至具有相同代码库的新 PC - 服务器运行良好且没有错误,我可以访问 mongodb。什么会导致上述错误?

当集合较大时,似乎会出现问题。但是我让它在另一台计算机上运行,​​它会立即加载集合。与 sock 的连接需要一分钟多的时间,并且在最终失败之前会变大:

在此处输入图像描述 在此处输入图像描述

4

1 回答 1

3

Meteor 的 DDP 实现了用于长轮询的 Sockjs 的心跳。这可能是由于 DDP Heartbeat 的超时默认值为 15 秒。如果您访问大量数据并且需要很长时间(在您的情况下为 1 分钟),DDP 将在被操作阻止足够长的时间以防止连接被代理关闭(这可能更糟)后超时,并且然后尝试重新连接。这可以永远持续下去,您可能永远无法完成该过程。

您可以在 DDP 关闭连接之前尝试在短时间内断开连接并重新连接,并将数据库访问划分为较短的连续过程,您可以在每次迭代中获取这些过程并查看问题是否仍然存在:

// while cursorCount <= data {
  Meteor.onConnection(dbOp);
  Meteor.setTimeout(this.disconnect, 1500); // Adjust timeout here
  Meteor.reconnect();
  cursorCount++;
}

func dbOp(cursorCount) {
  // database operation here
  // pick up the operation at cursorCount where last .disconnect() left off
}

但是,当断开连接时,所有实时更新也将停止,但显式重新连接可能会弥补较小的阻塞。

在Google 群组Meteor Hackpad上查看有关此问题的讨论

于 2014-12-07T15:54:24.717 回答