Curlの共有リソースとは、複数のCurlセッションが特定のリソースを共有できるようにすることを指し、リソースの重複の初期化を削減します。実際のアプリケーションでは、複数のCurl要求では、DNSの解析やCookieの処理など、同じ操作が必要になることがよくあります。これらのリソースを共有することにより、開発者はリクエスト効率を改善し、複製されたネットワークリクエストと計算を回避できます。
Curlは、共有セッションを初期化するためにcurl_share_init関数を提供し、共有するリソースを指定するためにcurlshopt_shareオプションと協力します。最も一般的なリソースには、DNS解像度、Cookie、SSLセッションが含まれます。
curl_share_init関数は、共有セッションを初期化するために使用されます。このセッションは、共有オプションを指定するために使用できる共有ハンドルを返します。この関数の基本的な使用法は次のとおりです。
$share = curl_share_init();
この関数は、共有ハンドル$ shareを返します。これを後で使用して共有リソースタイプを設定できます。
curl_share_setopt関数を介して、開発者は共有する必要があるリソースを正確に制御できます。たとえば、DNS解像度、Cookieストレージ、またはSSLセッションを共有することを選択できます。
DNS解像度共有は、特に同じドメイン名を複数回要求する場合、リクエストごとのDNSクエリを避ける場合の一般的な最適化測定の1つです。
curl_share_setopt($share, CURLSHOPT_SHARE, CURLSHARE_DNS);
このオプションにより、共有ハンドルを使用してすべてのカールセッションがDNS解像度の結果を共有し、重複したDNSクエリを削減できます。
複数のCurlリクエストで同じCookieが必要な場合、開発者はCookieを共有して、リクエストごとにCookie処理時間を短縮できます。
curl_share_setopt($share, CURLSHOPT_SHARE, CURLSHARE_COOKIE);
このオプションにより、複数のカールセッションが同じCookieストレージを共有できます。
複数のリクエストが同じSSLセッションを使用する場合、開発者はSSLセッションの状態を共有することを選択できます。これにより、各要求がSSL接続を再確立するのを防ぐことができ、それにより効率が向上します。
curl_share_setopt($share, CURLSHOPT_SHARE, CURLSHARE_SSL);
このオプションにより、SSLセッションを共有して、SSLハンドシェイクの数を減らすことができます。
共有セッションを初期化した後、特定のCurlリクエストに関連付ける必要があります。各Curl要求では、共有ハンドルがcurl_setopt関数に渡され、リクエストが共有リソースを使用できるようにします。
$ch = curl_init("http://example.m66.net");
curl_setopt($ch, CURLOPT_URL, "http://example.m66.net");
curl_setopt($ch, CURLOPT_SHARE, $share);
curl_exec($ch);
curl_close($ch);
上記のコードでは、リクエストがDNS、Cookie、またはSSLセッションを共有できるように、共有ハンドル$共有をCurlセッション$ chに渡します。
共有セッションが不要になった場合、共有セッションはcurl_share_close関数を介してクローズし、関連するリソースをリリースできます。
curl_share_close($share);
共有された粒度の選択:すべてのシナリオがDNS、Cookie、またはSSLセッションの共有に適しているわけではありません。これらのリソースを共有する場合、リクエストの特定の要件を考慮する必要があります。たとえば、さまざまなアプリケーションには異なるCookieストレージポリシーがある場合があり、過度の共有がいくつかのプライバシーの問題につながる可能性があります。
共有セッションのライフサイクル:共有セッションのライフサイクルがCurlセッションと一致し、Curlリクエストが終了する前に共有セッションが破壊されないようにしてください。
関連タグ:
Cookie