Swoole は、PHP 言語による非同期、並列の高性能ネットワーク通信フレームワークであり、非同期 TCP/UDP や非同期 MySQL などの高性能ネットワーク アプリケーションを実装できます。ネットワーク通信における純粋な PHP の欠点と比較して、Swoole はネットワーク アプリケーションのパフォーマンスを大幅に向上させ、サーバーの帯域幅と CPU 使用率を削減することができる、非常に実用的なツールです。
この記事では、Swoole フレームワークを使用して TCP サービスを開発する方法を紹介します。この記事では、Swoole のフレームワーク、API、および例を検討することで、効率的でスケーラブルな非同期 TCP サーバーを構築する方法を学びます。
ステップ 1: Swoole をインストールする
Swoole 開発と同じ PHP 環境で、composer を通じて Swoole の最新バージョンをインストールします:
composer require swoole/swoole
ソースを通じて Swoole をインストールすることもできますGitHub からソース コードをダウンロードしてコンパイルし、PHP 拡張機能を使用できます。
ステップ 2: TCP サーバーを作成する
Swoole フレームワークを使用して TCP サーバーを作成するのは非常に簡単です。次のコードを通じて、単純な Echo TCP サーバーを作成できます:
$server = new SwooleServer('127.0.0.1', 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP); $server->on('connect', function ($server, $fd){ echo "Client {$fd} connected. "; }); $server->on('receive', function ($server, $fd, $reactor_id, $data){ $server->send($fd, "Server: " . $data); }); $server->on('close', function ($server, $fd){ echo "Client {$fd} disconnected. "; }); $server->start();
上記のコードでは、TCP サーバーを作成し、$server->on
メソッド Event を通じて登録しました。コールバック関数。クライアントがサーバーに接続すると connect
イベントがトリガーされ、クライアント データを受信すると receive
イベントがトリガーされ、クライアントがトリガーを切断すると close
イベントがトリガーされます。
クライアントからデータを受信すると、$server->send()
メソッドを通じてデータを送り返します。
ステップ 3: 非同期プログラミング
Swoole は非同期 IO モデルをコアとして採用し、非同期プログラミングを完全にサポートします。 Swoole は、従来のプログラミング モデルとは異なる方法でプログラムされた API セットを提供し、PHP 開発者が非同期プログラミングを簡単に実行できるようにします。
Swoole では、同期 PHP 関数が非同期関数に変更されます。たとえば、file_get_contents
は swoole_async_readfile
に変更され、mysql_connect
は swoole_mysql_connect
に変更されます。
以下は簡単な非同期ファイル読み取りの例です:
$filename = "/tmp/test.txt"; $swoole_event = new SwooleEvent(); $swoole_event->add($fp = fopen($filename, "r"), function($fp){ echo fread($fp, 8192); swoole_event_del($fp); fclose($fp); });
上記のコードでは、Swoole の SwooleEvent
クラスと add()
Method を使用します。ファイルを非同期的に読み取ります。ファイル ポインターとコールバック関数を渡します。読み取りが完了すると、コールバック関数が実行され、ファイル ポインターがイベント リスナーから削除されます。
ステップ 4: パフォーマンス エクスペリエンス
Swoole の非同期 TCP サーバーは、多数の同時リクエストを処理し、サーバー負荷のピーク時に効率的なパフォーマンスを維持できます。これは、同じハードウェア条件下で、Swoole を使用すると、より高いスループットとより低いレイテンシーを達成できることを意味します。
次のコードはパフォーマンス テストに使用できます:
<?php $server = new SwooleServer('127.0.0.1', 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP); $server->set(array( 'worker_num' => 4, 'backlog' => 128, )); $server->on('connect', function ($server, $fd){ }); $server->on('receive', function ($server, $fd, $reactor_id, $data){ $server->send($fd, "Server: " . $data); }); $server->on('close', function ($server, $fd){ }); $server->start();
ab
コマンドを使用してテストできます:
$ ab -c 100 -n 10000 http://127.0.0.1:9501/
テスト プロセス中に、マシンの CPU 使用率と I/O 待機時間が大幅に短縮され、レポートが表示されます。
Swoole は、強力な非同期 IO サポートと高性能ネットワーク プログラミング機能を提供する非常に実用的なフレームワークです。 Swoole を使用すると、同じハードウェアでより高いスループット、より低いレイテンシー、およびより少ない CPU 使用率を得ることができます。ますます多くの PHP 開発者が Swoole を使用して、効率的でスケーラブルな非同期ネットワーク アプリケーションを構築し始めています。
以上がSwoole パフォーマンスのブレークスルー: 非同期 TCP サーバー開発ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。