PHP のソケットの基礎知識
この記事では、PHP における Socket の基礎知識を中心に紹介しますので、興味のある方は参考にしていただければ幸いです。
TCP/IP と UDP とは何ですか?
TCP/IP (伝送制御プロトコル/インターネット プロトコル) は、ワイド エリア ネットワーク (WAN) 用に設計された業界標準のプロトコル セットです。
UDP(User Data Protocol、User Datagram Protocol)は、TCPに相当するプロトコルです。これは、TCP/IP プロトコル スイートのメンバーです。
ここに、これらの契約間の関係を示す図があります。
TCP/IP プロトコル スイートには、トランスポート層、ネットワーク層、およびリンク層が含まれます。これで、TCP/IP と UDP の関係がわかりました。
ソケットはどこですか? 図 1 では、Socket の影が見えませんが、それはどこにあるのでしょうか?写真を使ってわかりやすく話しましょう。
ソケットがここにあることがわかりました。
ソケットとは何ですか? ソケットは、アプリケーション層と TCP/IP プロトコル スイート間の通信のための中間ソフトウェア抽象化層であり、一連のインターフェイスです。設計モードでは、Socket は実際にはファサード モードであり、複雑な TCP/IP プロトコル ファミリを Socket インターフェイスの背後に隠し、ユーザーにとっては一連の単純なインターフェイスだけで、指定されたプロトコルを満たすように Socket がデータを編成できます。
使用しますか? 先人たちは私たちのために多くのことをしてくれ、ネットワーク間の通信ははるかに簡単になりましたが、結局のところ、やるべきことはまだたくさんあります。以前ソケットプログラミングについて聞いたとき、比較的高度なプログラミング知識だと思っていましたが、ソケットプログラミングの動作原理を理解すれば、その謎は解けます。
人生の一場面。友人に電話したい場合は、最初にその番号をダイヤルします。呼び出し音が聞こえたら、友人は電話に出ます。この時点で、あなたと友人は接続され、通話できます。通話が終了したら電話を切って会話を終了します。 TCP/IP プロトコル ファミリは人生の中で誕生したのかもしれませんが、必ずしもそうではありません。
PHP でのソケット プログラミングの概要php5.3 には、php にソケット通信機能を持たせるためのソケット モジュールが付属しています。特定の API については、こちらをご覧ください。公式マニュアルを参照してください: http://php.net/manual/zh/function.socket-create.php。具体的な実装は、メモリ割り当てとネットワークの基礎となる 操作が欠けていることを除いて、c と非常によく似ています。バイトオーダー変換
同時に、PHP の pcntl モジュールと posix モジュールは、基本的なプロセス管理、信号処理、その他のオペレーティング システム レベルの機能を実現できます。ここには、pcntl_fork() と posix_setsid() という 2 つの非常に重要な関数があります。プロセスをフォーク () することは、実行中のプロセスのコピーを作成することを意味し、そのコピーは子プロセスとみなされ、元のプロセスは親プロセスとみなされます。 fork() の実行後、fork() を開始したプロセスおよび端末コントロールから分離できます。これは、親プロセスが自由に終了できることも意味します。 pcntl_fork() の戻り値。-1 は実行失敗を示し、0 は子プロセス内を示し、0 より大きい場合は親プロセス内を示します。 setit() は、最初に新しいプロセスを新しいセッションの「リーダー」にし、最後にプロセスが端末を制御しなくなります。これはデーモン プロセスになるための最も重要なステップでもあり、ターミナルが閉じられたときにプロセスが強制終了されないことを意味します。これは、中断できない常駐プロセスにとって重要なステップです。最後の fork() を実行します。この手順は必須ではありませんが、通常は、制御端末が取得されないようにするために実行されます。デーモンは通常、端末を制御しないバックグラウンド タスクとして考えられます。これには、次の 3 つの明らかな特徴があります。
- バックグラウンドで実行される
- # 開始プロセスから切り離される
- # 端末制御は不要です
- 最も一般的な実装メソッド: fork() ->() -> コード内の run_server() メソッドデーモンプロセスを実装します。
<?php
// 接受客户端请求,回复固定的响应内容
function server_listen_socket ($address, $port)
{
$buffer = "Msg from wangzhengyi server, so kubi...";
$len = strlen($buffer);
// create, bind and listen to socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (! $socket) {
echo "failed to create socket:" . socket_strerror($socket) . "\n";
exit();
}
$bind_flag = socket_bind($socket, $address, $port);
if (! $bind_flag) {
echo "failed to bind socket:" . socket_strerror($bind_flag) . "\n";
exit();
}
$backlog = 20;
$listen_flag = socket_listen($socket, $backlog);
if (! $listen_flag) {
echo "failed to listen to socket:" . socket_strerror($listen_flag) . "\n";
exit();
}
echo "waiting for clients to connect\n";
while (1) {
if (($accept_socket = socket_accept($socket)) == FALSE) {
continue;
} else {
socket_write($accept_socket, $buffer, $len);
socket_close($accept_socket);
}
}
}
function run_server ()
{
$pid1 = pcntl_fork();
if ($pid1 == 0) {
// first child process
// 守护进程的一般流程:fork()->setsid()->fork()
posix_setsid();
if (($pid2 = pcntl_fork()) == 0) {
$address = "192.168.1.71";
$port = "8767";
server_listen_socket($address, $port);
} else {
// 防止获得控制终端
exit();
}
} else {
// wait for first child process exit
pcntl_wait($status);
}
}
// server守护进程
run_server();
サーバー側ソケット プロセスを開始して、バックグラウンドで実行されているかどうかを確認します。効果は次の図に示されています。
クライアント アクセスはブラウザまたはcurlを介してアクセスできます。ここでは、curlを使用して直接アクセスします
#。
#要約 :
関連提案:
PHP マジック メソッド __call および __callStatic の使用方法
PHP 方法大きな CSV ファイルを読み取り、データベースにインポートするには
以上がPHP のソケットの基礎知識の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。
