やってみた理由
WebSocketを仕事で使うらしく、
そもそもSocket通信触ったことがなかったのでPHPでやってみました。
実行環境
ターミナル1:socketSample.php
を起動して127.0.0.1:8080
をlistenしておく。
ターミナル2:telnet
でターミナル1に接続。
全体の流れ
サンプルコード
簡素化のためにエラー処理は省いています。
socketSample.php
<?php
$address = '127.0.0.1';
$port = 8000;
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //※1
socket_bind($sock, $address, $port); //※2
socket_listen($sock, 5); // ※3
$msgsock = socket_accept($sock); // ※5
do {
$buf = socket_read($msgsock, 2048, PHP_NORMAL_READ); // ※6
if (!$buf = trim($buf)) {
continue;
}
$talkback = "PHP: You said '$buf'.\n";
socket_write($msgsock, $talkback, strlen($talkback)); // ※7
break;
} while (true);
socket_close($msgsock); // ※8
socket_close($sock); // ※9
?>
おわりに
普段はアプリケーション層のHTTPしか触らないので、ソケット通信を学んだのは良い勉強になったと思います。