ホームページ  >  記事  >  バックエンド開発  >  PHPのソケットとは何ですか?ソケット例の詳細な説明

PHPのソケットとは何ですか?ソケット例の詳細な説明

伊谢尔伦
伊谢尔伦オリジナル
2017-05-22 13:46:242926ブラウズ

ソケットとは何ですか?

ソケットは、アプリケーション層と 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,&#39;localhost&#39;,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 サイトの他の関連記事を参照してください。

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