Workermanの特徴
1、PHP純粋開発
Workermanで開発されたアプリケーションは、php-fpm、apache、nginxなどのコンテナに依存せずに独立して実行できます。これにより、PHP開発者はアプリケーションの開発、デプロイ、デバッグが非常に簡単に行えます。
2、PHPマルチプロセス対応
サーバーの複数のCPU性能を十分に活用するために、Workermanはデフォルトでマルチプロセスをサポートしています。Workermanはメインプロセスと複数の子プロセスを開始してサービスを提供し、メインプロセスは子プロセスを監視し、子プロセスはネットワーク接続を独自にリッスンしてデータを受信および処理します。プロセスモデルがシンプルであるため、Workermanはより安定し、効率的に動作します。
3、TCP、UDPサポート
WorkermanはTCPおよびUDPの2つのトランスポートプロトコルをサポートしており、1つのプロパティを変更するだけでトランスポートプロトコルを切り替えることができます。これにより、ビジネスコードを変更する必要はありません。
4、長時間接続サポート
多くの場合、チャットルーム、ゲームなど、PHPアプリケーションはクライアントとの長時間の接続を維持する必要がありますが、従来のPHPコンテナ(apache、nginx、php-fpm)ではこれを実現することが難しいです。Workermanを使用すると、サーバービジネスが接続を閉じるインターフェースを呼び出さない限り、PHP長時間接続を使用できます。Workermanの単一プロセスは、1万を超える同時接続をサポートし、マルチプロセスでは、数十万または数百万の同時接続をサポートします。
5、さまざまなアプリケーション層プロトコルのサポート
Workermanのインターフェースは、カスタムプロトコルを含むさまざまなアプリケーション層プロトコルをサポートしています。Workermanでは、プロトコルの切り替えも非常に簡単であり、1つのフィールドを構成するだけであり、プロトコルが自動的に切り替わり、ビジネスコードが変更されることなく、異なるプロトコルのポートを複数開くこともできます。
6、高並列処理サポート
WorkermanはLibeventイベントループライブラリをサポートしています(event拡張機能をインストールする必要があります)。 長時間接続での性能は非常に優れています。Event拡張機能がインストールされていない場合は、PHPの組み込みのSelect関連システムコールを使用し、性能も同様に優れています。
7、サービスのスムーズな再起動をサポート
サービスを再起動する必要がある場合(たとえば、バージョンをリリースする場合)、ユーザーのリクエストを処理しているプロセスが即座に終了することは望ましくありません。Workermanはスムーズな再起動機能を提供し、サービスのスムーズなアップグレードを保証し、クライアントの使用に影響を与えません。
8、ファイルの更新チェックおよび自動読み込みをサポート
開発中にコードを変更した後、すぐに効果を確認したい場合があります。WorkermanはFileMonitorファイル監視コンポーネントを提供し、ファイルが更新されるとWorkermanが自動的にリロードされ、新しいファイルが読み込まれるようにします。
9、特定のユーザーでの子プロセスの実行をサポート
子プロセスは実際にユーザーのリクエストを処理するため、セキュリティ上、子プロセスにはあまり高い権限を与えることはできません。そのため、Workermanは子プロセスの実行を実行するユーザーを設定することをサポートし、サーバーをより安全にします。
10、オブジェクトやリソースの永続的保持をサポート
Workermanは実行中にPHPファイルを1度だけ読み込んで解析し、それから常駐させるため、クラスや関数の宣言、PHP実行環境、シンボルテーブルなどが繰り返し作成および破棄されません。これはWebコンテナで実行されるPHPのメカニズムとはまったく異なります。Workermanでは、プロセスの寿命内で静的メンバーまたはグローバル変数が自動的に破棄されない状態で保持され、つまり、オブジェクトや接続などのリソースをグローバル変数やクラスの静的メンバーに入れると、そのプロセスの寿命内のすべてのリクエストでそれらを再利用することができます。たとえば、単一のプロセス内で1度だけデータベース接続を初期化すれば、その後、そのプロセスのすべてのリクエストでそのデータベース接続を再利用できます。これにより、頻繁なデータベース接続のプロセス中のTCPハンドシェイク、データベース認証、切断時のTCPハンドシェイクなどを回避し、アプリケーションの効率を大幅に向上させます。
11、高性能
PHPファイルは1度ディスクから読み込まれ解析されると、次回使用時にはメモリ中のopcodeを直接使用するため、ディスクI/OおよびPHPの初期化、実行環境の作成、レキシカル解析、構文解析、opcodeのコンパイル、リクエストの終了など多くの時間を要するプロセスが大幅に減少します。また、nginx、apacheなどのコンテナに依存しないため、nginxなどのコンテナとPHP間のオーバーヘッドも少なく、さらに、リソースは永続的に保持されるため、データベース接続の初期化などを毎回行う必要がなく、Workermanでアプリケーションを開発すると、非常に高い性能が得られます。
12、HHVMをサポート
HHVM仮想マシンで実行でき、PHPのパフォーマンスを数倍に向上させることができます。特にCPU密集型のビジネスにおいて、非常に優れた性能を発揮します。実際の負荷テストと比較では、負荷のかからないビジネスの状況では、HHVMでWorkermanを実行すると、Zend PHP5.6で実行するよりもネットワークスループのスループットが約30〜80%向上します。