(PECL mongo >=1.0.3)
MongoCursor::timeout — このクエリのクライアント側のタイムアウトを設定する
タイムアウトはいつでも設定可能で、同じカーソルでのそれ以降のクエリに影響を及ぼします。 また、データベースからのさらなる結果の取得にもこれは影響します。 たとえば、最初のレスポンスはずっと待ち続けるけれども それ以降の結果は 100 ミリ秒でタイムアウトさせたいというときは、このようにします。
<?php
$cursor = $collection->find();
// $cursor->hasNext() はクエリを実行します。タイムアウトが設定されていなければ
// レスポンスが得られるまでずっと待ち続けます
while ($cursor->hasNext()) {
$cursor->timeout(100);
// タイムアウトが設定されました。カーソルからデータベースにさらに
// 結果を問い合わせるときは、データベースからのレスポンスを 100 ミリ秒しか待ちません
try {
print_r($cursor->getNext());
}
catch(MongoCursorTimeoutException $e) {
echo "query took too long!";
}
}
?>
タイムアウトに 0 (あるいは負の数) を指定するとずっと待ち続けるようになります。 いったん設定したタイムアウトを取り消すときにこれを使うことができます。
ms
カーソルがレスポンスを待つミリ秒数。 デフォルトではいつまでも待ち続けます。
このカーソルを返します。
例1 MongoCursor::timeout() の例
このクエリは、レスポンスを 1 秒間待ち続けます。
<?php
$cursor = $collection->find()->timeout(1000);
try {
foreach ($cursor as $value) {
print_r($value);
}
}
catch(MongoCursorTimeoutException $e) {
echo "query took too long!";
}
?>
指定したミリ秒数を超える長さのクエリを実行すると MongoCursorTimeoutException をスローします。