ホームページ バックエンド開発 PHPチュートリアル PHPSocketプログラミングにおけるマルチプロセスエコーサーバーの詳細な紹介(画像とテキスト)

PHPSocketプログラミングにおけるマルチプロセスエコーサーバーの詳細な紹介(画像とテキスト)

Sep 13, 2018 pm 05:11 PM
linux php socket

この記事は、PHPSocket プログラミングにおけるマルチプロセス エコー サーバーについて詳しく (写真とテキストで) 紹介します。一定の参考価値があります。必要な友人は参照できます。お役に立てれば幸いです。

最後の echo サービス プログラムには大きな欠点があります。つまり、同時に 1 つのクライアントにしか接続できないということですが、これは明らかに不合理です。

そこで、今回はマルチプロセスアプローチを使用して、複数のクライアントに同時にサービスを提供します。

最終的な効果は次のとおりです:

PHPSocketプログラミングにおけるマルチプロセスエコーサーバーの詳細な紹介(画像とテキスト)

(作成したワーカー プロセスは ps コマンドで表示できます)

PHPSocketプログラミングにおけるマルチプロセスエコーサーバーの詳細な紹介(画像とテキスト)

##(xshell を介して複数のターミナルを開き、複数のクライアントをサービス プログラムに接続します)


コーディングを開始する前に、プロセスとは何かを紹介しましょう。

プロセス、つまりメモリを占有する実行中のプログラムは、独立したメモリ空間です。たとえば、Windows でメモ帳ソフトウェアを開くとき、この操作はプロセスを開くことと同じです。

マルチプロセスとは、一つのことを完成させるために複数のプロセスを作成することです。

今回はサーバー側プログラムのみを実装する必要があり、クライアントは以前のプログラムを引き続き使用します。以前の記事を読んでいない場合は、過去の記事をチェックしてください。

PHP では、pcntl_fork 関数を使用してプロセスを作成できます。

以下は関数のプロトタイプです:

int pcntl_fork ( void )
ログイン後にコピー

正式な説明:

成功すると、生成された子プロセスの PID が親の実行スレッドに返されます。子プロセスの実行スレッドでは子プロセスの PID が返され、範囲内では 0 が返されます。失敗すると、親プロセス コンテキストで -1 が返され、子プロセスは作成されず、PHP エラーが発生します。

これが親プロセスによって実行されるスレッドであると言われるのはなぜですか? プロセスには少なくとも 1 つのスレッドが含まれており、このスレッドがプロセスのメイン スレッドであるためです。

親プロセスが pcntl_fork を呼び出すと、独立した子プロセスもコピーされます。この子プロセスは親プロセスと同じコンテキストを持ちます。言い換えれば、2 つのプロセスは同じコードを共有しているだけです。

エンコードプロセスを入力します:

PHPSocketプログラミングにおけるマルチプロセスエコーサーバーの詳細な紹介(画像とテキスト)

pcntl_fork関数を実行すると、子プロセスも同時にコピーされます。コンテキストが親プロセスの実行環境の場合、戻り値は子プロセスのプロセス番号です。子プロセスの実行環境の場合は0を返します。したがって、次の if プログラム構造では、両方の分岐が実行されます。

子プロセスには以前と同じロジックがあり、クライアントからのメッセージの受信とクライアントへの送信を同時に行うために使用されます。

最後から 2 番目の行は、pcntl_waitpid 関数を呼び出します。この関数を説明する前に、まずゾンビ プロセスとは何かを理解しましょう。

通常の状況では、子プロセスは親プロセスを通じて作成されます。プロセスは独立したメモリ構造であるため、親プロセスは子プロセスの実行ステータスを知りません。子プロセスがタスクを完了した後、それ自体で終了することはできません。このとき、親プロセスは、子プロセスをリサイクルするためにオペレーティング システムを通じて子プロセスのステータスを取得する必要があります。そうしないと、子プロセスがガベージ リソース、つまりゾンビ プロセスになってしまいます。

以下はこの関数の関数プロトタイプです:

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 サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP:データベースとサーバー側のロジックの処理 PHP:データベースとサーバー側のロジックの処理 Apr 15, 2025 am 12:15 AM

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPの目的:動的なWebサイトの構築 PHPの目的:動的なWebサイトの構築 Apr 15, 2025 am 12:18 AM

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

Dockerデスクトップの使用方法 Dockerデスクトップの使用方法 Apr 15, 2025 am 11:45 AM

Dockerデスクトップの使用方法は? Dockerデスクトップは、ローカルマシンでDockerコンテナを実行するためのツールです。使用する手順には次のものがあります。1。Dockerデスクトップをインストールします。 2。Dockerデスクトップを開始します。 3。Docker Imageを作成します(DockerFileを使用); 4. Docker画像をビルド(Docker Buildを使用); 5。Dockerコンテナを実行します(Docker Runを使用)。

PHPとWeb:その長期的な影響を調査します PHPとWeb:その長期的な影響を調査します Apr 16, 2025 am 12:17 AM

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

VSCODEに必要なコンピューター構成 VSCODEに必要なコンピューター構成 Apr 15, 2025 pm 09:48 PM

VSコードシステムの要件:オペレーティングシステム:オペレーティングシステム:Windows 10以降、MACOS 10.12以上、Linux Distributionプロセッサ:最小1.6 GHz、推奨2.0 GHz以上のメモリ:最小512 MB、推奨4 GB以上のストレージスペース:最低250 MB以上:その他の要件を推奨:安定ネットワーク接続、XORG/WAYLAND(Linux)

VSCODEは拡張子をインストールできません VSCODEは拡張子をインストールできません Apr 15, 2025 pm 07:18 PM

VSコード拡張機能のインストールの理由は、ネットワークの不安定性、許可不足、システム互換性の問題、VSコードバージョンが古すぎる、ウイルス対策ソフトウェアまたはファイアウォール干渉です。ネットワーク接続、許可、ログファイル、およびコードの更新、セキュリティソフトウェアの無効化、およびコードまたはコンピューターの再起動を確認することにより、問題を徐々にトラブルシューティングと解決できます。

Dockerはどのような根本的なテクノロジーを使用していますか? Dockerはどのような根本的なテクノロジーを使用していますか? Apr 15, 2025 am 07:09 AM

Dockerは、コンテナエンジン、ミラー形式、ストレージドライバー、ネットワークモデル、コンテナオーケストールツール、オペレーティングシステム仮想化、コンテナレジストリを使用して、コンテナ化機能をサポートし、軽量でポータブルで自動化されたアプリケーションの展開と管理を提供します。

なぜPHPを使用するのですか?利点と利点が説明されました なぜPHPを使用するのですか?利点と利点が説明されました Apr 16, 2025 am 12:16 AM

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

See all articles