Ответ 1
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
}
Однако при отключении все live-обновления также прекратятся, но явно повторное подключение может компенсировать меньшую блокировку.
См. обсуждение этой проблемы в группе Google и Meteor Hackpad