PHPのcurl_multiの挙動についてご教授頂きたいです。
curl_multiで200件のほどのAPI呼び出しを並列で処理させたいのですが、私の環境では40件のレスポンスしか受け取れないという状況が発生しています。
CURLMOPT_MAX_TOTAL_CONNECTIONSの値を変更することで挙動は変わるのですが、どうもCURLMOPT_MAX_TOTAL_CONNECTIONSを40以上にすると全件を処理することができないようです。
これは、curl_multiの仕様なのでしょうか?
それとも、他になにか設定が必要なのでしょうか?
ご教授頂けますと幸いです。
調査内容
curl_multiを実行するサーバーと、curl_multiでコールされるサーバーの2台で動作確認。
CURLMOPT_MAX_TOTAL_CONNECTIONSの設定値によって挙動は異なるが、CURLMOPT_MAX_TOTAL_CONNECTIONSが40以上だとレスポンスを正常に受け取れない。
全てのパターンでコールされる側のサーバで対象のURLにコール回数分のアクセスがあることは確認した。
- curl_multiでのリクエスト数100件
- コールされる側のURLでは、PHPで300秒スリープ
####CURLMOPT_MAX_TOTAL_CONNECTIONS=未設定の場合
- 303秒で処理終了
- 40件しかレスポンスを取得できていない
- コールされた側では100件のリクエストを確認できる
####CURLMOPT_MAX_TOTAL_CONNECTIONS=40の場合
- 903秒で処理終了
- 全件レスポンスを取得できた
- コールされた側では100件のリクエストを確認できる
####CURLMOPT_MAX_TOTAL_CONNECTIONS=50の場合
- 303秒で処理終了
- 40件しかレスポンスを取得できていない
- コールされた側では100件のリクエストを確認できる
あなたの回答
tips
プレビュー