To set timeouts for all queries, do this:
MongoCursor::$timeout = -1 (-1 is no timeout)
(PECL mongo >=1.0.3)
MongoCursor::timeout — Establece un tiempo de espera en el lado del cliente para esta consulta
Se puede establecer un tiempo de espera en cualquier momento y afectará a consultas subsiguientes del cursor, incluyendo la obtención de más resultados desde la base de datos.
ms
El número de milisegundos que ha de esperar el cursor a una respuesta. Use -1 para esperar eternamente. Por omisión, el cursor esperará 30000 milisegundos (30 segundos).
Este cursor.
Hace que los métodos que obtienen resultados lancen una MongoCursorTimeoutException si la consulta toma más tiempo de los milisegundos especificados.
Ejemplo #1 Ejemplo de MongoCursor::timeout()
En el siguiente ejemplo, el controlador esperará a una respuesta inicial de la base de datos, y luego esperará 100 ms para las respuestas subsiguientes.
<?php
$cursor = $collection->find();
$cursor->timeout(-1);
/* $cursor->hasNext() ejecuta la consulta. Se ha establecido un tiempo de espera
* infinito, por lo que el controlador esperará lo necesario a una respuesta.
*/
while ($cursor->hasNext()) {
$cursor->timeout(100);
/* Ahora se ha establecido el tiempo de espera, por lo que, si el cursor necesita obtener
* más resultados de la base de datos, solo esperará 100 ms a una respuesta.
*/
try {
print_r($cursor->getNext());
} catch (MongoCursorTimeoutException $e) {
echo "¡La consulta tomó demasiado tiempo!";
}
}
?>
Esto no hace que el servidor de MongoDB cancele las operaciones que se ejecuten durante mucho tiempo; solamente instruye al controlador para que deje de esperar a una respuesta y lance una MongoCursorTimeoutException después de un tiempo establecido. Si fuera necesario especificar un tiempo límite para una consulta, se puede considerar el uso de MongoCursor::maxTimeMS().
To set timeouts for all queries, do this:
MongoCursor::$timeout = -1 (-1 is no timeout)