To set timeouts for all queries, do this:
MongoCursor::$timeout = -1 (-1 is no timeout)
(PECL mongo >=1.0.3)
MongoCursor::timeout — Устанавливает время ожидания на стороне клиента для запроса
Время ожидания может быть установлено в любое время и повлияет на последующие запросы курсора, включая выборку большого количества результатов из базы данных.
ms
Количество миллисекунд, в течение которых курсор ожидает ответа.
Используйте -1
, чтобы ждать бесконечно.
По умолчанию курсор будет ждать 30000
миллисекунд (30 секунд).
Возвращает курсор.
Вызывает методы, которые извлекают результаты, чтобы вызвать исключение MongoCursorTimeoutException, если запрос занимает больше времени, чем указанное количество миллисекунд.
Пример #1 Пример использования MongoCursor::timeout()
В следующем примере драйвер будет бесконечно ждать первоначального ответа базы данных, а затем ждать 100 миллисекунд для последующих ответов.
<?php
$cursor = $collection->find();
$cursor->timeout(-1);
/* $cursor->hasNext() выполняет запрос. Устанавливаем бесконечное время ожидания,
/* поэтому драйвер будет ждать ответа столько, сколько потребуется.
*/
while ($cursor->hasNext()) {
$cursor->timeout(100);
/* Время ожидания уже установлено, поэтому, если курсору нужно получить
/* больше результатов из базы данных, он будет ждать ответа только 100 мс.
*/
try {
print_r($cursor->getNext());
} catch (MongoCursorTimeoutException $e) {
echo "запрос занял слишком много времени!";
}
}
?>
Это не заставляет сервер MongoDB отменять длительные операции; он только указывает драйверу прекратить ждать ответа и выдать исключение MongoCursorTimeoutException по истечении заданного времени. Если вам нужно указать время ожидания для запроса на стороне сервера, попробуйте использовать MongoCursor::maxTimeMS().
socketTimeoutMS
для MongoClient::__construct()
To set timeouts for all queries, do this:
MongoCursor::$timeout = -1 (-1 is no timeout)