PHPでは、 curl_upkeep()は、リクエストが開始されるたびに接続の作成と閉鎖のオーバーヘッドを減らすために永続的な接続プールを維持する関数です。 HTTPリクエストにGuzzleを使用する場合、Guzzle自体は直接Curl_upkeep()関数を提供しませんが、Guzzleの構成オプションと適切な接続プーリングメカニズムを使用して、この効果をシミュレートできます。この記事では、Guzzleで同様の機能を実装する方法について説明します。
curl_upkeep()は、PHPのCurl拡張機能で使用される関数であり、持続的な接続を維持し、オープン接続を再利用することで効率を向上させます。このアプローチは、各リクエストとの接続を再確立することと比較して、リクエストの遅延と帯域幅の消費を大幅に削減します。
Guzzleは、Curl_upkeep()の機能と同様に、永続的な接続と接続プールの管理をサポートする強力なHTTPクライアントライブラリです。 GuzzleのHTTPクライアントを構成することで、これを達成できます。
Guzzleでは、接続プールの管理がHandlestackとCurlmultihandlerを通じて実装されます。リクエストが送信されるたびに、GuzzleはCurl_upkeep()の関数のような接続を再確立することなく、既存の接続を自動的に再利用します。
Guzzleでは、 MAX_REQUESTSと永続的な構成を介して接続プールの動作を制御できます。これらの構成項目を使用すると、接続プールのサイズを最適化したり、ポリシーを再利用したりして、リクエストの効率を確保できます。
Guzzleのcurl_upkeep()に似た効果を達成するには、以下を確保する必要があります。
接続プールのサイズを構成して、最大複数の接続を維持できるようにします。
要求するたびに新しいTCP接続の確立を避けるために、接続の多重化を設定します。
接続プール内の接続を再利用できるように、リクエストの数を最大化します。
これらの構成をGuzzleに実装する方法のコード例を次に示します。
<?php
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlMultiHandler;
// カスタムを作成します HandlerStack
$stack = HandlerStack::create(new CurlMultiHandler());
// 接続プールと多重化接続を構成します
$client = new Client([
'base_uri' => 'https://m66.net',
'handler' => $stack,
'timeout' => 30, // リクエストタイムアウトを設定します
'http_errors' => false, // エラーの自動投げを無効にします
'connect_timeout' => 5, // 接続タイムアウトを設定します
'max_requests' => 10, // せいぜい維持してください10同時リクエスト
'persistent' => true // 永続的な接続を有効にします
]);
// 送信 GET 聞く
$response = $client->request('GET', '/path/to/resource');
// 応答コンテンツを取得します
echo $response->getBody();
HandLestack :: Create(new CurlMultiHandler()) :このコード行は、 CurlMultiHandlerを使用してGuzzleクライアントを作成します。 CurlMultiHandlerは、並行要求と永続的な接続をサポートしています。
「永続的」=> true :永続的な接続を有効にします。これにより、ガズルは、毎回接続を再確立することなく既存の接続を再利用します。
'max_requests' => 10 :接続プールのサイズを最大10の同時リクエストに設定します。
これらの設定により、Guzzleは、パフォーマンスのためにHTTP接続プールとマルチプレックス接続を自動的に管理します。
実際の生産環境では、次のような他の要因を考慮する必要があります。
並行性リクエストの数:ガズルが同時リクエストを処理し、接続プールの最大制限を超えないことを確認してください。
エラー処理:たとえば、リクエストが失敗したときに自動再試行が必要かどうか。
遅延最適化:リクエストの応答時間が長い場合、タイムアウトとConnect_Timeoutを適切に追加できます。
これらの構成アイテムは、ガズルリクエストが効率的かつ安定して実行できるようにするために、実際のニーズに応じて調整できます。
Guzzleの接続プーリングと永続的な接続関数を通じて、 curl_upkeep()のような効果を実現できます。適切な構成を使用すると、リクエストの効率を確保でき、接続の作成と破壊のオーバーヘッドを削減できます。 Guzzleは、HTTP接続プールを管理する強力な構成オプションを提供し、高い並行性環境でアプリケーションが安定したままであることを確認します。