リクエスト間でHTTP永続接続を使用できる方法はありますか? CURL拡張機能には、mysql、redis、pgの他の拡張機能があるので、すべての要求で使用される接続プールを作成する方法がありません。PHPと永続的なHTTP接続
私は、同じリクエスト内でのみ持続的なhttp接続を使用できることを確認しました。
Silviu
リクエスト間でHTTP永続接続を使用できる方法はありますか? CURL拡張機能には、mysql、redis、pgの他の拡張機能があるので、すべての要求で使用される接続プールを作成する方法がありません。PHPと永続的なHTTP接続
私は、同じリクエスト内でのみ持続的なhttp接続を使用できることを確認しました。
Silviu
pecl_http拡張子がlibcurlのを使用して、あなたが再利用できる持続的なTCP接続を開くことができます:
$client = new http\Client('curl', $persistentHandleID);
$request = new http\Client\Request('GET', 'http://example.com/');
$client->enqueue($request);
$client->send();
$response = $client->getResponse($request);
別$client
は同じPHPプロセスで実行されている場合は(おそらく別のPHP要求中を)が同じホストにアクセスし、同じ$persistentHandleID
を共有する場合、以前と同じTCP接続を介してHTTP要求を送信します。
PHPモジュールがシャットダウンされるまで、TCP接続が生かされるか$client
がConnection: Close
またはforbids further use of the connectionを送るまで: `ヘッダーは次のとおりです。
$client->setOptions(['forbid_reuse' => true, … ]);
HTTPでは、キープアライブとパイプライニングという概念があります。キープアライブでは、1つのTCP接続を複数のHTTP要求と応答で使用できます。これにより、ブラウザは、1つのTCP接続上にすべてのリソース(例えば、画像、スクリプトなど)を有するウェブページをロードすることができ、これにより、接続のセットアップおよび切断のオーバーヘッドが回避される。 CURLはこれをデフォルトでで使用し、ヘッダーにConnection: keep-alive
を追加します。サーバーは、最大リクエスト数と接続がオープンされたままになる時間を設定します。しかし、依然として要求 - 応答モードで動作します。
パイプライン化では、応答を受信する前に複数の要求を行うことができます。パイプライン処理は広く実装されておらず、クライアントとサーバーの両方で機能する必要があります。 CURLで使用するには、クライアントのためにそれを実装するライブラリ(そこにいくつかあります)を見つけなければなりません。また、サーバもそれを利用しなければなりません。
CURLアプリがキープアライブヘッダーを送信しているかどうかわからない場合は、httpプロキシまたはパケットスニッファーを使用してトラフィックを検査します。 PHPのための
HTTPで/ 1.1持続的な接続がデフォルトなし'接続されていますそれに必要なもの。 PHPプログラムが必要とするのは、後続のリクエストを行うときに同じカールハンドルを再利用することだけです。 –
私の質問は次のとおりです。リクエスト間でHTTP永続接続を使用する方法はありますが、最後の投稿でも同様です。私が見るところでは、同じリクエスト内でのみ永続的なHTTP接続を使用できます。 phpスクリプトのライフサイクルのため、私はあなたが接続のプールをどのように使用できるかわかりません。 – silviu
ありがとうジョー、これは私が探しているものです! – silviu