低レベル プログラマ以外の場合、ソケットの内部実装メカニズムを深く理解することは非常に困難です。ソケットは、プロセス通信を実装するためにオペレーティング システムによってカプセル化された一連の関数であることを理解するだけで十分です。それを作成して呼び出すだけで十分です。
PHP の言語特性と位置付けにより、PHP はソケット クライアントにのみ適しており、ソケット サーバーには適していません。
ソケットは主に下位層とネットワーク サービスの開発を指向しているため、サーバー側は一般的に C や Java などの言語で実装されます。問題 (同時実行性、ブロッキングなど) に対する成熟した完全なソリューションもありますが、PHP は明らかにこのアプリケーション シナリオには適していません。 (推奨される学習: PHP ビデオ チュートリアル )
実際、PHP はソケットを通じて MySQL データベースを操作します。これはまさに、ソケットが基盤となるプロトコルを保護し、ネットワーク サービス間の相互接続を実現するためです。それらはシンプルになります。
従来のサーバーサイド言語で実装されたソケットに加えて、HTML5 の普及に伴い、ブラウザ クライアントに実装された WebSocket も徐々に登場しており、これは注目に値します。FlashSocket も優れたソリューションです。 。
クライアント側でソケットを操作するには、fsockopen、socket_create、stream_socket_clientなどの関数を使用できますが、PHP5の場合はstream_socket_clientを使用することを推奨します。
ソケット対話型アプリケーションの例: ソケットを使用したフォームの送信
新しい test.php ファイルを作成し、http:// に送信します。 demo.com/index .php?id=1 フォーム データを送信します。コードは次のとおりです:
<?php $data = array('comment'=>'this is a robot comment'); $data = http_build_query($data); $out = "POST http://demo.com/index.php?id=1 HTTP/1.1\r\n"; // 通过POST方式发送数据 $out .= "Host: demo.com\r\n"; $out .= "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n"; $out .= "Content-length: ".strlen($data)."\r\n"; $out .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:48.0) Gecko/20100101 Firefox/48.0"."\r\n"; $out .= "Connection: close"."\r\n"."\r\n"; // 注意:此处有两个 \r\n $out .= $data."\r\n"; // 正文数据 $fp = fsockopen("demo.com", 80, $errno, $errstr, 30); // 创建socket客户端连接 // $fp = stream_socket_client("tcp://demo.com:80", $errno, $errstr, 30); 推荐这种写法 fwrite($fp, $out); // 向服务器发送数据 while (!feof($fp)) { echo fgets($fp, 1280); // 读取服务器响应的数据 } fclose($fp); // 关闭socket连接 ?>
次の点に注意する必要があります:
fsockopen の最初のパラメータには、IP アドレスを使用することもできます。SSL などを使用する場合を除き、 http:// 文字列を含めないでください。
リクエスト ヘッダーは、必ずしもすべてのヘッダー フィールドを含める必要はなく、一般的に必要なのは、いくつかのコアヘッダー
最後のヘッダーでは、Connection の後に 2 つの改行があります
エンコードの問題に注意してください
以上がなぜphpはソケットに適していないのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。