ホームページ >バックエンド開発 >PHPチュートリアル >PHPSocketプログラミングにおけるマルチプロセスエコーサーバーの詳細な紹介(画像とテキスト)
この記事は、PHPSocket プログラミングにおけるマルチプロセス エコー サーバーについて詳しく (写真とテキストで) 紹介します。一定の参考価値があります。必要な友人は参照できます。お役に立てれば幸いです。
最後の echo サービス プログラムには大きな欠点があります。つまり、同時に 1 つのクライアントにしか接続できないということですが、これは明らかに不合理です。
そこで、今回はマルチプロセスアプローチを使用して、複数のクライアントに同時にサービスを提供します。
最終的な効果は次のとおりです:
(作成したワーカー プロセスは ps コマンドで表示できます)
int pcntl_fork ( void )正式な説明: 成功すると、生成された子プロセスの PID が親の実行スレッドに返されます。子プロセスの実行スレッドでは子プロセスの PID が返され、範囲内では 0 が返されます。失敗すると、親プロセス コンテキストで -1 が返され、子プロセスは作成されず、PHP エラーが発生します。 これが親プロセスによって実行されるスレッドであると言われるのはなぜですか? プロセスには少なくとも 1 つのスレッドが含まれており、このスレッドがプロセスのメイン スレッドであるためです。 親プロセスが pcntl_fork を呼び出すと、独立した子プロセスもコピーされます。この子プロセスは親プロセスと同じコンテキストを持ちます。言い換えれば、2 つのプロセスは同じコードを共有しているだけです。 エンコードプロセスを入力します:
int pcntl_waitpid ( int $pid , int &$status [, int $options = 0 ] )正式な説明: フォークの子プロセスの状態を待つか返します。 実は、上記のコードには問題があり、foreach で初めて pcntl_waitpid を呼び出した後、メイン プロセスは実際にはこの時点でブロックされ、最初の子プロセスが終了するまで待機し、その間に他の子プロセスが終了します。このとき異常終了するとメインプロセスで再利用されず、ゾンビプロセスが生成されます。実際の開発では、メインプロセスは依然として他のことを行う必要があります。 そこで、ここではノンブロッキング方式を推奨します。これは非常に簡単で、3 番目のパラメータ WNOHANG を追加するだけです。つまり: pcntl_waitpid ($pid, $status, WNOHANG)この方法では、子プロセスを終了せずにすぐに戻ることができるため、後続のコードの実行を継続できます。 関連する推奨事項:
サーバーサイド PHP マルチプロセス プログラミングの実践
サーバーサイド PHP マルチプロセス プログラミングpractice_PHP チュートリアル
以上がPHPSocketプログラミングにおけるマルチプロセスエコーサーバーの詳細な紹介(画像とテキスト)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。