PEARのHTTP_OAuthでタイムアウトを指定する
最近TwitterのAPIが重いことが多いです。同期的に処理するにしろ非同期で処理するにしろ、いつまで待ってもレスポンスが返って来ないAPIの応答を待ち続けるのはリソースの面から見ても好ましくありません。
というわけで可能ならば PEAR の HTTP_OAuth を使う際にタイムアウトを設定しておきます。以下は timeout に 10 秒を指定する例です。
// HTTP_OAuth_Consumer
$consumer = new HTTP_OAuth_Consumer($consumerKey, $consumerSecret);
// HTTP_Request2
$http = new HTTP_Request2();
// 10秒を設定
$options = array(
'timeout' => 10,
);
$http->setConfig($options);
// HTTP_OAuth_Consumer_Request
$consumerRequest = new HTTP_OAuth_Consumer_Request;
$consumerRequest->accept($http);
$consumer->accept($consumerRequest);
HTTP_OAuth_Consumer は何も指定しなければデフォルトの設定で HTTP_Request2 を呼び出します。ソースを見ると HTTP_Request2 の timeout の初期値は 0 になっていますが、これは「タイムアウト制限なし」なのでPHPの処理がタイムアウトになるまで応答を待ち続けることになります。
リクエストがタイムアウトすると例外が発生します。この時 throw される例外は HTTP_Request2_Exception ですが、HTTP_OAuth_Consumer_Request の中で catch されると HTTP_OAuth_Exception として throw されます。
HTTP_Request2で設定可能なオプションや初期値は以下を参照してください。
» Manual :: Configuration parameters for HTTP_Request2
コメントを残す