ソケットとは何ですか?
ソケットは、アプリケーション層と TCP/IP プロトコル スイート間の通信のための中間ソフトウェア抽象化層であり、インターフェイスのセットです。設計モードでは、Socket は実際にはファサード モードであり、複雑な TCP/IP プロトコル ファミリを Socket インターフェイスの背後に隠し、ユーザーにとっては一連の単純なインターフェイスだけで、指定されたプロトコルを満たすように Socket がデータを編成できます。 PHP のソケット モジュールを使用して何かを行う人はほとんどいません。おそらく、誰もが PHP のソケット モジュールをスクリプト言語の範囲内に置いていますが、実際には、PHP のソケット モジュールは、ftplist、http ポスト送信、 smtp 送信、パケットのグループ化と特別なメッセージ (smpp プロトコルなど) の対話、whois クエリ。これらは、より一般的なクエリの一部です。 特に、PHP のソケット拡張ライブラリでできることは、C よりもそれほど劣っていません。
ソケットの基本
phpは、Berkleyのソケットライブラリを使用して接続を作成します。ソケットは単なるデータ構造であることがわかります。このソケット データ構造を使用して、クライアントとサーバー間のセッションを開始します。このサーバーは常にリッスンし、新しいセッションを生成する準備をしています。クライアントがサーバーに接続すると、サーバーがセッションを待機しているポートが開きます。このとき、サーバーはクライアントの接続要求を受け入れ、サイクルを実行します。これで、クライアントはサーバーに情報を送信できるようになり、サーバーもクライアントに情報を送信できるようになります。
ソケットを生成するには、プロトコル、ソケット タイプ、およびパブリック プロトコル タイプの 3 つの変数が必要です。ソケットを生成するときに選択できるプロトコルは 3 つあります。詳細なプロトコルの内容については、以下を読み続けてください。パブリック プロトコル タイプの定義は、接続の重要な要素です。これらの一般的なプロトコルの種類を見てみましょう。
1. プロトコル
名前/定数 | 説明 |
AF_INET | これは、送信に TCP または UDP を使用し、IPv4 アドレスに使用されるほとんどのプロトコルです。 |
AF_INET6 | 上記と似ていますが、IPv6 アドレスに使用されます |
AF_UNIX | ローカルプロトコル、Unix および Linux システムで使用されますが、めったに使用されず、通常はクライアントとサーバーとして使用されます 同じ上で使用しますデバイス |
2. ソケット タイプ
名前/定数 | 説明 |
SOCK_STREAM | このプロトコルは、シーケンシャルで信頼性の高い、データ統合されたバイト ストリーム ベースの接続です。これは最も一般的に使用されるソケットのタイプです。このソケットは送信に TCP を使用します。 |
SOCK_DGRAM | このプロトコルは、コネクションレスの固定長の転送呼び出しです。このプロトコルは信頼性が低く、接続に UDP を使用します。 |
SOCK_SEQPACKET | このプロトコルは、固定長のデータ パケットを送信して送信する 2 回線の信頼性の高い接続です。このパケットは、読み取られる前に完全に受け入れられる必要があります。 |
SOCK_RAW | このソケット タイプは、ICMP パブリック プロトコルを使用して単一のネットワーク アクセスを提供します。 (ping とtraceroute はこのプロトコルを使用します) |
SOCK_RDM | このタイプはめったに使用されず、ほとんどのオペレーティング システムでは実装されていません |
3. パブリックプロトコル
名前/定数 | 説明 |
ICMP | インターネット制御メッセージプロトコル、主にネットワークステータスを確認し、エラーメッセージを報告するために使用されます |
UDP | ユーザー データグラム プロトコル、これはコネクションレスで信頼性の低い送信プロトコルです。 |
TCP | 送信制御プロトコル、これは最も使用されている信頼性の高いパブリック プロトコルであり、データ パケットが受信者に確実に到達できるようにすることができます。送信中にエラーが発生した場合は、エラー パケットが再送信されます。 |
ソケットを生成する 3 つの要素がわかったので、PHP の socket_create() 関数を使用してソケットを生成します。 socket_create() 関数には、プロトコル、ソケット タイプ、パブリック プロトコルの 3 つのパラメータが必要です。 socket_create() 関数は、正常に実行された場合はソケットを含むリソース タイプを返し、失敗した場合は false を返します。
Resourece socket_create(int protocol, int socketType, int commonProtocol);
php は、ソケットを IP にバインドし、ソケットの通信を監視し、ソケットを受け入れることができる、ソケットを操作するための関数をいくつか提供しています。関数がどのように生成、受け入れ、リッスンするかを理解するために例を見てみましょう。ソケットに。
コードは次のとおりです:
<?php $commonProtocol = getprotobyname("tcp"); $socket = socket_create(AF_INET, SOCK_STREAM,$commonProtocol); socket_bind($socket,'localhost',1337); socket_listen($socket); ?>
注: 上記の例では、独自のサーバー側が生成されます。
例の最初の行では、パブリック プロトコル名を使用してプロトコル タイプを取得します。ここでは TCP パブリック プロトコルが使用されます。UDP または ICMP プロトコルを使用する場合は、getprotobyname() 関数のパラメータを「udp」または「icmp」に変更する必要があります。別の方法は、getprotobyname() 関数を使用せず、socket_create() 関数で SOL_TCP または SOL_UDP を指定することです。
例の 2 行目はソケットを生成し、ソケット リソースのインスタンスを返します。ソケット リソースのインスタンスを取得したら、ソケットを IP アドレスとポートにバインドする必要があります。
ここの 3 行目は、ソケットをローカル コンピューター (127.0.0.1) にバインドし、ソケットを 1337 ポートにバインドします。次に、すべての受信ソケット接続をリッスンする必要があります。 4 行目以降は、すべてのソケット関数とその使用法を理解する必要があります。ソケット機能については後の章で詳しく説明します。
【おすすめ関連チュートリアル】
1.「php.cn Dugu Jiijian (4) - PHPビデオチュートリアル」
2.
以上がPHPのソケットとは何ですか?ソケット例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。