Подтвердить что ты не робот

Метеор - время ожидания соединения. Не получено ни одного биения

Я получаю следующую ошибку:

Тайм-аут подключения. Полученное сердцебиение не получено.

При доступе к моему приложению meteor (http://127.0.0.1:3000). Приложение перенесено на новый компьютер с той же базой кода - и сервер работает нормально, без ошибок, и я могу получить доступ к mongodb. Что может вызвать указанную выше ошибку?

Проблема возникает, когда коллекция больше. однако я запускаю его на другом компьютере, который мгновенно загружает коллекцию. Соединение к носку занимает минуту и ​​растет в размерах, прежде чем, наконец, провалится:

enter image description hereenter image description here

4b9b3361

Ответ 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