ホームページ  >  記事  >  PHPフレームワーク  >  Swoole の実践: Curl ライブラリの同時実行機能を改善する方法

Swoole の実践: Curl ライブラリの同時実行機能を改善する方法

WBOY
WBOYオリジナル
2023-06-16 10:13:401546ブラウズ

ネットワーク技術の発展に伴い、HTTP リクエストを処理する必要があるアプリケーションがますます増えています。中でも Curl ライブラリは広く使われている HTTP リクエストツールであり、豊富な機能と強力なパフォーマンスでさまざまなリクエストのニーズに応えます。ただし、同時実行性が高い状況では、Curl ライブラリのパフォーマンスが制限される可能性があります。この記事では、Swoole 拡張機能を使用して Curl ライブラリの同時実行機能を向上させ、より高いリクエスト トラフィックに対応する方法を紹介します。

1. Swoole を理解する

Swoole は、PHP をベースにしたサードパーティの拡張機能であり、高性能ネットワーク通信フレームワークです。 TCP、UDP、HTTP、WebSocket、その他のプロトコルなどのネットワーク通信機能を提供し、非同期、コルーチン、同時実行などの機能を備えています。

Swoole のコルーチン機能は非常に重要で、PHP のブロッキング IO モデルを克服し、PHP アプリケーションのパフォーマンスを大幅に向上させることができます。 Swoole コルーチン モードでは、PHP のネットワーク操作は非同期かつノンブロッキングの方法で完了するため、同時実行性とスループットの高いアプリケーションに適しています。

2. 開発環境の準備

Swoole を使用する前に、まず Swoole 拡張機能をインストールする必要があります。コマンド ラインで次のコマンドを実行して、最新の Swoole 拡張機能をインストールします。

pecl install swoole

インストールが成功したら、php.ini ファイルに次の設定を追加します。

extension=swoole.so

PHP を再起動すると、Swoole が拡張機能が使用できるようになります。

3. 同時 Curl リクエストを実装する

Swoole を使用して Curl ライブラリの同時実行機能を向上させる方法を説明するために、同時リクエストの例を実装し、リクエストによってリクエストのパフォーマンスをテストします。複数の URL を並行して実行します。以下はサンプル コードです:

<?php

// 声明需要请求的网址列表
$urlList = [
    'https://www.baidu.com',
    'https://www.baidu.com/s?wd=swoole',
    'https://www.baidu.com/s?wd=php',
    'https://www.baidu.com/s?wd=http',
    'https://www.baidu.com/s?wd=nginx',
    'https://www.baidu.com/s?wd=mysql',
];

// 创建一个SwooleHttpClient实例
// 可以理解为是一个并发Curl客户端
$http = new SwooleHttpClient('www.baidu.com', 443, true);

// 当请求完成时触发该事件
$http->on('request', function ($client) use ($urlList) {
    foreach ($urlList as $url) {
        // 发起异步请求
        $client->get($url, function ($client) use ($url) {
            // 请求完成后输出结果
            echo $url . " request completed, Body: " . strlen($client->body) . " bytes
";
        });
    }
});

// 发起异步请求
$http->get('/');

// 启动事件循环
$http->close();

上記のコードでは、SwooleHttpClient クラスを使用して同時 Curl クライアントを作成します。クライアントが「/」リソースをリクエストすると、イベント コールバックを通じて複数の非同期リクエストが開始され、同時リクエストが実装されます。

Swoole 同時 Curl はデフォルトで最大 1024 リクエストをサポートできることに注意してください。さらに多くのリクエストを送信する必要がある場合は、swoole.event_max_size 構成を設定する必要があります。例:

swoole_event_set([
    'max_size' => 4096
]);

4. パフォーマンス テスト

Curl ライブラリの同時実行機能の向上に対する Swoole の効果をテストするために、ab (Apache Bench) ツールを使用してテストします。

コマンド ラインで次のコマンドを実行してテストします。

ab -n 1000 -c 100 https://localhost/curl.php

このうち、-n パラメーターはリクエストの数を示し、-c パラメーターは同時リクエストの数を示します。 ://localhost/curl.php はサンプルコードの URL です。

テストでは、例としてリクエスト数 1000、同時リクエスト数 100 を使用します。

Swoole 拡張機能を使用しない場合、リクエストには 47.582 秒かかり、リクエスト スループットは 21.039 req/秒ですが、Swoole 拡張機能を使用すると、リクエストにかかる時間はわずか 0.841 秒、リクエスト スループットは 1186.752 req/秒です。 Swoole が Curl ライブラリの同時実行機能の向上に非常に明らかな効果をもたらしていることがわかります。

5. 概要

この記事では、Swoole 拡張機能を使用して Curl ライブラリの同時実行機能を向上させる方法を紹介します。 Swoole は、非同期、コルーチン、同時実行などの機能を備えた強力なネットワーク通信フレームワークであり、同時実行性とスループットの高いアプリケーションで大きな役割を果たします。この記事の紹介を通じて、開発者が Swoole をより適切に適用できるようになり、それによって PHP アプリケーションのパフォーマンスが向上することを願っています。

以上がSwoole の実践: Curl ライブラリの同時実行機能を改善する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。