Skip to main content
`Ctrl`+`K`

# 7.3.6. リクエストタイムアウト

## 7.3.6.1. 概要

Added in version 6.0.2.

各リクエストにタイムアウトを設定できます。

指定したタイムアウトまでにリクエストが完了しなかった場合、そのリクエストはキャンセルされます。タイムアウトを設定しない場合、そのリクエストが完了するまで処理をします。

リクエストタイムアウト機能はクライアントサイドでタイムアウトを実装しているときに有用です。もし、クライアントサイドだけでタイムアウトを実装していると、クライアントがレスポンスを待つことをやめたあともリクエストを処理し続けます。これは不必要にリソースを消費しています。このリクエストにタイムアウトを設定していれば、じきにこのリクエストはキャンセルされます。

## 7.3.6.2. リクエストにタイムアウトを設定する方法

すべてのコマンドは `request_timeout` パラメーターを受け付けます。 `request_timeout` パラメーターを追加することでリクエストにタイムアウトを設定できます。

タイムアウト値の単位は秒です。 `0.1` のように小数で指定することで1秒未満のタイムアウトを設定できます。 `0.1` は100ミリ秒のタイムアウトという意味です。

以下はリクエストに `5.5` 秒のタイムアウトを設定する例です。:

    select Users --request_timeout 5.5

## 7.3.6.3. タイムアウト時のリターンコード

リクエストがタイムアウトすると、レスポンスヘッダーの リターンコード は `GRN_CANCEL` （ `-77` ）になります。

以下はタイムアウト時にレスポンス例です。:

    [
      [
        -77,
        1459846102.63304,
        0.000220775604248047,
        "[request-canceler] a request is canceled: <0x7fa0d5d7ed00>"
      ]
    ]

レスポンスヘッダーについては 出力形式 を参照してください。

## 7.3.6.4. デフォルトでリクエストタイムアウトを有効にする

groonga 実行ファイル はデフォルトのリクエストタイムアウトを設定する機能があります。デフォルトのリクエストタイムアウトは `groonga --default-request-timeout` で指定します。

デフォルトのリクエストタイムアウトが0より大きい場合、すべてのリクエストはその値をリクエストタイムアウトに使います。

リクエストに `request_timeout` パラメーターを指定するとデフォルトのリクエストタイムアウトを上書きできます。もし、デフォルトのリクエストタイムアウトが3秒で `request_timeout` パラメーターが1秒なら、そのリクエストは1秒後にキャンセルされます。

## 7.3.6.5. 参考

- リターンコード

- 出力形式

- request_cancel