Workerman は、純粋に PHP で開発されたオープンソースの高性能 PHP ソケット非同期フレームワークです。モバイル通信、モバイルゲームサーバー、オンラインゲームサーバー、チャットルームサーバー、ハードウェア通信サーバー、スマートホーム、車両のインターネット、モノのインターネットなどの分野の開発で広く使用されています。 Websocket、HTTP、その他のプロトコルをサポートし、カスタム プロトコルもサポートします。 Workerman をベースとすることで、開発者はビジネス ロジックの開発により集中できるようになり、基礎となる PHP Socket の開発について心配する必要がなくなりました。
Workerman の多くの珍しい機能により、PHP 開発者は珍しいアプリケーションを開発できます。
公式ウェブサイトアドレス:http://www.workerman.net
公式ウェブサイトには非常に具体的な開発ドキュメントがあり、ここではその機能のいくつかを紹介します。
純粋な PHP 開発
Workerman は完全に PHP を使用して開発されており、Workerman を使用して開発されたアプリケーションは、php-fpm、apache、nginx などのコンテナーに依存せずに独立して実行できます。 これにより、PHP 開発者はアプリケーションを開発、展開、デバッグするのが非常に便利になります。
PHP マルチプロセスをサポート
サーバーのマルチ CPU のパフォーマンスを最大限に活用するために、Workerman はデフォルトでマルチプロセスとマルチタスクをサポートします。 Workerman は、メイン プロセスと複数のサブプロセスを開始して、外部サービスを提供します。メイン プロセスは、サブプロセスの終了シグナルを監視し、サービスを処理するための新しいサブプロセスを生成します。これにより、アプリケーションのパフォーマンスが向上するだけでなく、ワーカーマンの安定性も向上します。
TCP、UDPをサポート
Workerman は、TCP と UDP という 2 つのトランスポート層プロトコルをサポートしています。ビジネス コードを変更せずにトランスポート層プロトコルを変更するには、構成の 1 つのフィールドを変更するだけで済みます。
長時間接続をサポート
多くの場合、PHP アプリケーションはチャット ルーム、ゲームなど、クライアントとの長時間の接続を維持する必要がありますが、従来の PHP コンテナー (Apache、nginx、php-fpm) ではこれを実現するのが困難です。 Workerman を使用すると、PHP の長い接続を簡単に使用できるようになります。単一の PHP プロセスは数千、さらには数万の同時接続をサポートでき、複数のプロセスは数十万、さらには数百万の同時接続をサポートできます。
さまざまなアプリケーション層プロトコルをサポート
このインターフェイスは、カスタム プロトコルを含むさまざまなアプリケーション層プロトコルをサポートします。 Workerman がデフォルトでサポートするプロトコルには、HTTP、WebSocket、および単純な Text プロトコルが含まれます。 同時に、Workerman は共通のプロトコル インターフェイスを提供し、開発者はこのインターフェイスに基づいて独自のプロトコルを簡単に開発できます。
高い同時実行性をサポート
Workerman は、Libevent イベント ポーリング ライブラリをサポートしています (Libevent 拡張機能をインストールする必要があります)。Libevent がインストールされていない場合は、PHP の組み込みの Select 関連のシステム コールが使用されます。
スムーズなサービス再開をサポート
サービスを再起動する必要がある場合 (リリース バージョンなど)、ユーザーのリクエストを処理しているプロセスがすぐに終了されることは望ましくありません。また、サービスを外部に提供するのに十分なプロセスが不足することも望ましくありません。いつでも外部サービスにサービスを提供できる十分なプロセスを確保するために、Workerman は、スムーズな再起動プロセス中に子プロセスにリクエストを処理させます。終了する前に、いつでも外部サービスを提供できる十分なプロセスが存在することを確認できます。
HHVM をサポート
HHVM をサポートすると、特に CPU を集中的に使用する操作において、PHP のパフォーマンスが大幅に向上します (通常は約 50% 以上)。実際のストレス テスト後、確かに大幅なパフォーマンス向上効果が見られます。
指定されたユーザーとしてサブプロセスの実行をサポート
子プロセスは実際にユーザー要求を処理するプロセスであるため、セキュリティ上の理由から、子プロセスには高すぎるアクセス許可を設定することはできません。そのため、Workerman は、子実行プロセスを実行するユーザーの設定をサポートしています。
独自のモニタリング機能が付属
Workerman には内部に監視および統計モジュールがあり、プロセスの終了数と終了ステータス、各プロセスと監視対象の IP ポートが占有するメモリ サイズ、各プロセスの起動時間、実行中のプロセスのサービス名、およびそれぞれのプロセスによって処理されたリクエストの数、接続の数、失敗したパケット送信の数など。この情報は、php start.php status をローカルで実行することでローカルで表示できます。
ミリ秒レベルのタイマーをサポート
ミリ秒レベルのタイマーをサポートし、スケジュールされたタスクやスケジュールされた計算 (ゲーム内のマップ上の AI 関連の計算など) を実行できます。
非同期 IO をサポート
Workerman の組み込みネットワーク IO インターフェイスは非同期であり、開発者はイベントベースの非同期プログラミングを実装できます
オブジェクトまたはリソースの永続的な保持をサポートします
プロセスのライフサイクル内では、静的メンバーまたはグローバル変数は、積極的に破棄されることなく永続的に維持されます。つまり、静的メンバーまたはグローバル変数が一度初期化されている限り、現在のプロセスのライフサイクル全体内のすべてのリクエストを再利用できます。この静的メンバーまたはグローバル変数。たとえば、データベース接続が 1 つのプロセスで一度初期化される限り、このプロセスのその後のすべてのリクエストでこのデータベース接続を再利用できます。ユーザー リクエストごとにデータベースに再接続する必要がないため、TCP の 3 方向が回避されます。頻繁なデータベース接続のプロセスにおけるハンドシェイクとデータベース権限の検証、切断時の TCP 4 ウェイ ハンドシェイク プロセスにより、アプリケーションの効率が大幅に向上します。 memcache、redis などの初期化にも同じことが当てはまります。
高性能
PHP ファイルは一度ディスクから読み取られて解析されるため、次回使用するときにメモリ内のオペコードが直接使用され、ディスク IO とリクエストの初期化、ファイルの作成が大幅に削減されます。 PHPでは実行環境、字句解析、構文解析など、オペコードのコンパイルやリクエストクローズなど時間のかかる処理が多く、nginxやapacheなどのコンテナに依存しないため、nginxやapacheのネットワークオーバーヘッドが軽減されます。他のコンテナが PHP と通信する最も重要なことは、リソースを永続的に維持できること、および毎回データベース接続を初期化する必要がないことです。そのため、Workerman を使用してアプリケーションを開発すると、パフォーマンスが非常に高くなります。
多くのアプリケーション
Workerman には、Thrift-Rpc、Json-Rpc、チャット ルーム、統計監視サービス、およびこの Web サイトの Web プログラムなど、多くのアプリケーションがあり、現在、Workerman は、毎日の売上高が 200 万を超える多くの電子商取引企業を含む、多くの企業で使用されています。 1億件を超えるユーザーからのシステム開発、および大手ゲーム会社が使用するゲームバックエンドの開発。
分散展開をサポート
WorkerMan は分散展開をサポートしており、サービス品質に影響を与えることなくサーバーをスムーズかつ動的に追加および削減できます。これにより、WorkerMan クラスターは、かなりのスループットまたは同時 TCP 接続をサポートできるようになります。
ハートビート検出をサポート
ゲートウェイ/ワーカー開発モデルは、サーバー側のハートビート検出をサポートしています。これにより、アプリケーション層のハートビートをクライアントに定期的に送信でき、極端なクライアントの切断 (停電、突然のネットワーク障害など) を即座に検出できます。