PHP のソケットの基礎知識

Jun 07, 2018 pm 03:27 PM
php socket

この記事では、PHP における Socket の基礎知識を中心に紹介しますので、興味のある方は参考にしていただければ幸いです。

TCP/IP と UDP とは何ですか?

TCP/IP (伝送制御プロトコル/インターネット プロトコル) は、ワイド エリア ネットワーク (WAN) 用に設計された業界標準のプロトコル セットです。
UDP(User Data Protocol、User Datagram Protocol)は、TCPに相当するプロトコルです。これは、TCP/IP プロトコル スイートのメンバーです。
ここに、これらの契約間の関係を示す図があります。

2015811151417312.jpg (596×448)

TCP/IP プロトコル スイートには、トランスポート層、ネットワーク層、およびリンク層が含まれます。これで、TCP/IP と UDP の関係がわかりました。
ソケットはどこですか? 図 1 では、Socket の影が見えませんが、それはどこにあるのでしょうか?写真を使ってわかりやすく話しましょう。

2015811151446490.jpg (542×476)

ソケットがここにあることがわかりました。
ソケットとは何ですか? ソケットは、アプリケーション層と TCP/IP プロトコル スイート間の通信のための中間ソフトウェア抽象化層であり、一連のインターフェイスです。設計モードでは、Socket は実際にはファサード モードであり、複雑な TCP/IP プロトコル ファミリを Socket インターフェイスの背後に隠し、ユーザーにとっては一連の単純なインターフェイスだけで、指定されたプロトコルを満たすように Socket がデータを編成できます。
使用しますか? 先人たちは私たちのために多くのことをしてくれ、ネットワーク間の通信ははるかに簡単になりましたが、結局のところ、やるべきことはまだたくさんあります。以前ソケットプログラミングについて聞いたとき、比較的高度なプログラミング知識だと思っていましたが、ソケットプログラミングの動作原理を理解すれば、その謎は解けます。
人生の一場面。友人に電話したい場合は、最初にその番号をダイヤルします。呼び出し音が聞こえたら、友人は電話に出ます。この時点で、あなたと友人は接続され、通話できます。通話が終了したら電話を切って会話を終了します。 TCP/IP プロトコル ファミリは人生の中で誕生したのかもしれませんが、必ずしもそうではありません。

2015811151507191.jpg (478×491)

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 つの明らかな特徴があります。

    バックグラウンドで実行される
  1. # 開始プロセスから切り離される
  2. # 端末制御は不要です
  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();
ログイン後にコピー

実行効果

サーバー側ソケット プロセスを開始して、バックグラウンドで実行されているかどうかを確認します。効果は次の図に示されています。

2015811151526030.png (985×174)クライアント アクセスはブラウザまたはcurlを介してアクセスできます。ここでは、curlを使用して直接アクセスします

#。

2015811151634550.png (930×64)#要約 :

以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。

関連提案:

PHP マジック関数とマジック定数の使用方法

PHP マジック メソッド __call および __callStatic の使用方法

PHP 方法大きな CSV ファイルを読み取り、データベースにインポートするには

以上がPHP のソケットの基礎知識の詳細内容です。詳細については、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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

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

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

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

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

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

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

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

See all articles