ソケットとは何ですか? いわゆるソケットは通常「ソケット」とも呼ばれ、IP アドレスとポートを表すために使用されます。アプリケーションは通常、「ソケット」を通じてネットワークにリクエストを送信するか、ネットワークリクエストに応答します。端的に言えば、それはコミュニケーションのメカニズムです。これは、銀行、通信部門、その他の部門の電話顧客サービス部門に似ています。あなたが電話をかけると、顧客サービス部門はソケットのサーバー側に相当し、誰かが電話をかけている場合は、あなたの側はクライアントに相当します。もちろん、顧客サービス部門の電話交換機が重複することはありません。
ソケットがどのように機能するかを説明するために、以下に例を示します。アプリケーション層をベースに開発する場合、必ずしも原理を理解する必要はありませんが、知っていたほうが良いでしょう。インターネット上にはソケットに関するphp APIがあります。置くだけで使えます。
2. ソケットサーバーserver.php
// サーバー側のソケットを作成します
$tcp = getprotobyname("tcp");
$socket = ソケット作成(af_inet, sock_stream, $tcp);
socket_bind($socket, '127.0.0.1', 10008); //監視対象のポートをバインドします
socket_listen($socket); //リスニングポート
//データを初期化し、クライアントと通信します
$buffer = "接続";
while (true) {
//ソケット接続を受け入れます
$connection = ソケット_accept($socket);
if(!$connection){
エコー「接続失敗」
}その他{
エコー「ソケットが接続されました」
// 情報データをクライアントに渡します
if ($buffer != "") {
echo "クライアントにデータを送信します";
ソケット書き込み($connection, $buffer . " ");
echo "ソケットに書き込みました";
} その他 {
echo "バッファーにデータがありません" ;
}
// クライアントから情報を取得します
while ($data = @socket_read($connection, 1024, php_normal_read)) {
printf("バッファ: " . $data . " ");
//情報を取得し、クライアントにフィードバックを送信します
socket_write($connection, "受信した情報");
}
}
ソケットクローズ($接続);
//ソケットを閉じる
printf("ソケットを閉じた");
}
?>
3. ソケットクライアント client.php
コードは次のとおりです:
// クライアントのソケット接続を確立します
$ソケット = ソケット_作成(af_inet, sock_stream, sol_tcp);
$connection =ソケット_connect($socket, '127.0.0.1', 10008); //サーバー側のソケットに接続します
while ($buffer = @socket_read($socket, 1024, php_normal_read)) {
//サーバーはクライアントにステータスを伝えます
if (preg_match("/not connect/",$buffer)) {
エコー「接続しないでください」
休憩
} その他 {
//サーバーから送信された情報
エコー "バッファデータ: " . $buffer ;
echo "ソケットへの書き込み";
//顧客の情報をチャネルに書き込み、サーバーに渡します
if (!socket_write($socket, "何らかのデータ ")) {
エコー「書き込みに失敗しました」;
}
//サーバーが情報を受信した後、応答情報を返します
while ($buffer =socket_read($socket, 1024, php_normal_read)) {
echo "サーバーに送信されました: サーバーからのデータ応答は次のとおりです:" . " ";
}
}
}
?>
4. 通信機構のイメージ(待ち時間に関係なく自動的にソケットをクローズする)
簡単な説明。説明する前に、サーバーとクライアントを実行するために php コマンドを使用する必要がある理由を説明します。これにより、クライアントにはブラウザ上でアクセスできるようになり、少なくとも接続が確立されます。タイムアウト。これはなぜでしょうか? ソケットを作成すると、クライアントが接続を希望しているかどうかが常に監視されるからです。
ソケット通信の確立には 2 つのソケット チャネルが必要です。1 つはサーバーによって作成され、もう 1 つはクライアントによって作成されます。
1行目、サーバーはソケットチャネルを作成し、情報をキャッシュに置き、クライアントの接続を待ちます
2 行目、クライアントはソケット チャネルを作成し、サーバーに接続し、通信用のサーバー側の情報を取得し、送信する情報をチャネルに送信します
3 行目、サーバーはクライアントから情報を取得し、クライアントに情報を受信したことを伝えます。伝えたい情報をチャンネルに送ってください
4行目、クライアントはサーバーから確認情報を取得します
この時点で通信は完全に確立されており、データ送信完了後、サーバーはソケット通信を切断します。
1 ソケットサーバーを実行します
コードは次のとおりです:
[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php
インタラクティブモードが有効になりました
この点に関してはどのような取り組みが行われてきたのでしょうか?
a はポート 10008 をリッスンしました
コードは次のとおりです:
[zhangy@blackghost ~]$ netstat -an |grep listen |grep 10008
tcp 0 0 127.0.0.1:10008 0.0.0.0:* 聞いてください
[zhangy@blackghost ~]$
b 情報をキャッシュに送信します
コードは次のとおりです:
$buffer = "接続";
上のコードを見てください
2 ソケットクライアントを実行します
コードは次のとおりです:
[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/client.php
インタラクティブモードが有効になりました
バッファデータ: 接続
ソケットへの書き込み
サーバーに送信されました: 一部のデータ
サーバーからの応答: 情報を受信しました
3 サーバーに戻ります
コードは次のとおりです:
[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php
インタラクティブモードが有効になりました
ソケットが接続されました
クライアントにデータを送信
ソケットに書き込みました
バッファ: いくつかのデータ
ソケットを閉じました
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
http://www.bkjia.com/PHPjc/975892.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/975892.html技術記事 php でのソケット通信メカニズムの例の詳細な説明 この記事では、主に php でのソケット通信メカニズムを紹介し、ソケット通信メカニズムの原理を説明し、サンプルの形でソケット通信マシンを詳細に分析します。