To set timeouts for all queries, do this:
MongoCursor::$timeout = -1 (-1 is no timeout)
(PECL mongo >=1.0.3)
MongoCursor::timeout — Défini un délai maximum d'attente côté client pour cette requête
Un délai maximum d'attente peut être défini à n'importe quel moment, et affectera les requêtes suivantes du curseur, incluant la récupération de plus de résultats depuis la base de données.
ms
Le nombre de millisecondes que le curseur doit attente une réponse.
Pour attendre indéfiniement, utilisez la valeur -1
.
Par défaut, le curseur attendra 30000
millisecondes (30 secondes).
Ce curseur.
Si la requête prend plus de temps que le nombre de millisecondes spécifié, une exception de type MongoCursorTimeoutException sera émise.
Exemple #1 Exemple avec MongoCursor::timeout()
Dans l'exemple suivant, le driver va attendre indéfiniement la réponse initiale de la base de données, puis, va attendre 100ms pour les réponses suivantes.
<?php
$cursor = $collection->find();
$cursor->timeout(-1);
/* $cursor->hasNext() exécute la requête. Un délai d'attente infini a été défini, aussi
* le driver va attendre autant de temps que nécessaire la réponse.
*/
while ($cursor->hasNext()) {
$cursor->timeout(100);
/* Un délai d'attente maximal a maintenant été défini, aussi, si le curseur
* doit récupérer plus de résultats depuis la base de données, il n'attendra
* la réponse que pendant 100ms.
*/
try {
print_r($cursor->getNext());
} catch (MongoCursorTimeoutException $e) {
echo "La requête prend trop longtemps !";
}
}
?>
Ce comportement ne permet pas d'annuler une opération trop longue au niveau du serveur MongoDB ; il ne va qu'informer le driver d'arrêter d'attendre une réponse, et lancer une exception MongoCursorTimeoutException après la durée définie. Si vous devez spécifier un délai maximal d'attente côté serveur pour une requête, veuillez utiliser la méthode MongoCursor::maxTimeMS().
socketTimeoutMS
pour
MongoClient::__construct()
To set timeouts for all queries, do this:
MongoCursor::$timeout = -1 (-1 is no timeout)