マルチスレッドリクエストをシミュレートするためにcurlを使用したPHPコード例

不言
リリース: 2023-04-04 12:34:01
転載
2183 人が閲覧しました

この記事の内容は、curl を使用してマルチスレッドをシミュレートしてリクエストを送信する PHP のコード例についてです。一定の参考値があります。必要な友人は参照してください。お役に立てれば幸いです。

各 PHP ファイルの実行はシングルスレッドですが、PHP 自体は、php-fpm プロセスの使用など、他のテクノロジーを使用してマルチスレッドの同時実行を実現することもできます。ここでは、curl が使用されますマルチスレッドの送信リクエストをシミュレートします。 PHP のcurl マルチスレッドは、curl_multi_exec を継続的に呼び出してコンテンツを取得します。これは、curl マルチスレッドの同時操作をシミュレートするデモです。

//设置缓冲为0(也可以去php.ini设置)
ini_set('output_buffering', 0);
//打开输出缓冲区
ob_start();
//设置一个空数组
$curl_Arr=[];
//这里模拟20次请求
for($i=0;$i<20;$i++){
    //开启curl连接
    $curl_Arr[$i]=curl_init("http://XXXX/test.php");
    //CURLOPT_RETURNTRANSFER 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE;
    curl_setopt($curl_Arr[$i],CURLOPT_RETURNTRANSFER,1);
}

//创建批处理cURL句柄
$mh = curl_multi_init();

foreach($curl_Arr as $k => $ch){
    //curl句柄入栈增加
    curl_multi_add_handle($mh,$ch);
}
$active = null;
while(count($curl_Arr)>0){
    //发起curl_multi请求
    @curl_multi_exec($mh,$active);
    foreach($curl_Arr as $k => $ch){
        //获取句柄的返回值
        if($result[$k]= curl_multi_getcontent($ch)){
            //输出结果
            echo "$result[$k]\n";
            ob_flush();
            //把被释放的数据发送到浏览器
            flush();
            //关闭该句柄
            curl_multi_remove_handle($mh,$ch);
            unset($curl_Arr[$k]);
        }
    }
}
//关闭ouput_buffering机制
ob_end_flush();
//关闭"curl_mulit"句柄
curl_multi_close($mh);
ログイン後にコピー

リクエストされた php ページをサーバー上に作成し、test.php という名前を付け、次の内容を記述しました

1 sleep(10);
2 echo &#39;seccess&#39;;exit;
ログイン後にコピー

は、10 秒待った後の次のステートメントを示します。

その後、コマンド ラインでプログラムを実行すると、結果は次のようになりました。

上記のコードでは、$ をループすることによって、curl_multi_getcontent が呼び出されます。データがあるかどうかをクエリするためのcurl_Arr配列。データがある場合は、$curl_Arr配列の要素数が0になるまで要素を出力、削除します。

このシミュレートされたマルチスレッド実装は、curl のcurl_multi シリーズの関数を使用してこの機能を実現します。この一連の機能の使い方の紹介については、Baiduでたくさん検索できます。ここでは説明を省略します。

以上がマルチスレッドリクエストをシミュレートするためにcurlを使用したPHPコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート