転載元: http://www.byz5.com/html/234/6/6521/1.htm
魅力的でわかりやすいソケット。ソケットは、PHP では十分に活用されていない機能です。今日は、クライアント接続を使用できるサーバーがあり、クライアント上のソケットを使用して接続し、サーバーが特定の処理情報をクライアントに送信します。
完全なソケットプロセスが表示されたら、それを将来のプログラム開発に使用します。サーバーは接続可能な HTTP サーバーであり、クライアントは Web ブラウザーです。これは単一のクライアント/サーバーの関係です。
ソケットの基本
PHP は、Berkley のソケット ライブラリを使用して接続を作成します。ソケットは単なる数値構造体であることが理解できます。このソケット値構造体を使用して、クライアントとサーバー間のセッションを開始します。このサーバーは常にリッスンし、新しいセッションを生成する準備をしています。クライアントがサーバーに接続すると、サーバーがセッションをリッスンしているポートが開きます。このとき、サーバー側はクライアントの接続要求を受け付け、ループが実行されます。これで、クライアントはサーバーに情報を送信できるようになり、サーバーもクライアントに情報を送信できるようになります。
ソケットを生成するには、1 つのプロトコル、1 つのソケット タイプ、1 つのパブリック プロトコル タイプの 3 つの変数が必要です。ソケットを生成するときに選択できるプロトコルは 3 つあります。特定のプロトコルの内容を取得するには、以下の内容を読み続けてください。
共通のプロトコル タイプの定義は、接続に不可欠な要素です。以下の表で一般的なプロトコルの種類を見てみましょう。
表 1: プロトコル
名前/定数の説明
AF_INET これは、送信に TCP または UDP を使用してソケットを生成するために使用され、IPv4 アドレスで使用されるほとんどのプロトコルです
AF_INET6 は上記と似ていますが、 IPv6 アドレス
AF_UNIX ローカル プロトコルは、Unix および Linux システムで使用されます。通常、クライアントとサーバーが同じマシン上にある場合に使用されます。名前/定数の説明。
SOCK_STREAM このプロトコルは、シーケンシャルで信頼性が高く、数値的に完全なバイト ストリーム ベースの接続です。これは最も一般的に使用されるソケットのタイプです。このソケットは送信に TCP を使用します。
SOCK_DGRAM このプロトコルは、コネクションレスの固定長転送呼び出しです。このプロトコルは信頼性が低く、接続に UDP を使用します。
SOCK_SEQPACKET このプロトコルは、固定長の値のパケットを送信して送信する二重回線の信頼性の高い接続です。このパッケージを読み取る前に、完全に受信する必要があります。
SOCK_RAW このソケット タイプは、ICMP パブリック プロトコルを使用して単一コレクション アクセスを提供します。 (ping とtraceroute はこのプロトコルを使用します)
SOCK_RDM このタイプはめったに使用されず、ほとんどのオペレーティング システムでは実装されていません
表 3: パブリック プロトコル
名前/定数の説明
ICMP インターネット制御メッセージ プロトコル、主にゲートウェイとホストで使用され、ネットワーク ステータスを確認し、エラー メッセージを報告するために使用されます
UDP ユーザー バリュー メッセージ プロトコル、コネクションレスで信頼性の低い伝送プロトコルです
TCP 伝送制御プロトコル。これは、送信プロセス中にエラーが発生した場合に、値パケットが受信者に確実に届くようにするために使用される、信頼性の高いパブリック プロトコルです。
ソケットを生成する 3 つの要素がわかったので、PHP でソケット_create() 関数を使用してソケットを生成します。このsocket_create()関数には、1つのプロトコル、1つのソケットタイプ、および1つのパブリックプロトコルの3つのパラメータが必要です。 socket_create() 関数は、正常に実行された場合はソケットを含むリソース タイプを返し、失敗した場合は false を返します。
リソースsocket_create(int protocol, intソケットType, int commonProtocol);
ソケット関数
関数名の説明
socket_accept()は1つのソケット接続を受け入れます
socket_bind()はソケットを1つのIPアドレスとポートにバインドします
ソケットクリアエラー() ソケットエラーまたは最後のエラーコードをクリアします
socket_close() ソケットリソースを閉じます
socket_connect() ソケット接続を開始します
socket_create_listen() 指定されたポートでリッスンするソケットを開きます
socket_create_pair() ペアを生成します未分化ソケットの配列への変換
socket_create() は 1 つのソケットを生成します。これは 1 つのソケットの数値レイアウトを生成するのと同等です
socket_get_option() はソケット オプションを取得します
socket_getpeername() はホストと同様のリモート IP アドレスを取得します
socket_getsockname() は、ローカルソケットの IP アドレスを取得します
socket_iovec_add() は、別の/集約された配列に新しいベクトルを追加します
socket_iovec_alloc() この関数は、送受信できる新しいベクトルを作成します iovec 値の読み取りと書き込みレイアウト
socket_iovec_delete() 割り当てられたiovecを削除
socket_iovec_fetch() 指定されたiovecリソースの値を返す
socket_iovec_free() iovecリソースを解放する
socket_iovec_set()はレイアウトiovecの数値を装備
socket_last_error( ) 現在のソケットの最後のエラー コードを取得します
socket_listen() は、指定されたソケットからのすべての接続をリッスンします
socket_read() は、指定された長さの値を読み取ります
socket_readv() は分離/集約された配列から値を読み取ります
socket_recv() はソケットからキャッシュへの値を終了します
socket_recvfrom() は指定されたソケットから値を受け取ります。指定されていない場合は、デフォルトで現在のソケットが使用されます
socket_recvmsg() iovec からメッセージを受信
socket_select() 複数選択
socket_send() この関数は、接続されているソケットに値を送信します
socket_sendmsg() はソケットにメッセージを送信します
socket_sendto() はメッセージを送信しますに指定されたアドレスのソケット
socket_set_block() はブロック スタイルでソケットを設定します
socket_set_nonblock() は非ブロック スタイルでソケットを設定します
socket_set_option() はソケット オプションを設定します
socket_shutdown() この関数により、読み取り、書き込み、またはをシャットダウンします
指定されたソケットsocket_strerror() は、指定されたエラー番号を持つ特定のエラーを返します
socket_write() 値をソケットキャッシュに書き込みます
socket_writev() 値を分離/集約されたソケットに書き込みます
array上記の関数はすべて PHP のソケットに関するものです。これらの関数を使用するには、ソケットを開く必要があります。まだ開いていない場合は、php.ini ファイルを編集して、次の行の前のコメントを削除してください。
extension=php_sockets.dll
行く方法がない場合 コメントが見つからない場合は、次のコードを使用して拡張ライブラリをロードしてください: if(!extension_loaded('sockets')) { if(strtoupper(substr(PHP_OS) , 3)) == "WIN") { dl('php_sockets.dll' ); } else { dl('sockets.so') }
*ソケットが開いているかどうかがわからない場合は、 phpinfo() 関数を使用して、ソケットが開いているかどうかを確認できます。ソケットが開いているかどうかは、phpinfo 情報を確認することで確認できます。