流星 - 连接超时。没有收到心跳

时间:2013-07-19 09:57:35

标签: node.js mongodb meteor

我收到以下错误:

  

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

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

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

enter image description here enter image description here

1 个答案:

答案 0 :(得分:3)

Meteor的DDP实现了用于长轮询的Sockjs Heartbeats。这可能是由于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 groupMeteor Hackpad

上查看有关此问题的讨论