WebSocketをテストするための簡単なphpコードを作成しました。クライアントは問題なく接続し、プローブなしでデータを受信できましたが、サーバーからクライアントにデータを送信できません。コードを修正して機能させてください。
server.php
$in = '';
$content = '';
$connected = 0;
while($in != "quit"){
if(!$connected){
$in=trim(fgets(STDIN));
$pos = strpos($in, 'Sec-WebSocket-Key:');
if($pos !== false){
$key = str_replace('Sec-WebSocket-Key: ','',$in);
$magic = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
$resp = shell_exec("echo -n $key$magic | openssl sha1 -binary | base64");
}
if($in == ""){
$head = "HTTP/1.1 101 Switching Protocols\r\n";
$head.= "Connection: Upgrade\r\n";
$head.= "Upgrade: websocket\r\n";
$head.= "Sec-WebSocket-Accept: $resp\r\n";
$head.= "\r\n";
echo $head;
$connected = 1;
}
}else{
sleep(3);
$hex = "810461626364"; //abcd
$byte = str_split($hex, 2);
$out = '';
foreach($byte as $b){
$out.= chr(hexdec($b));
}
echo $out;
}
}
ターミナルに入力:
ncat -l 12345 -c 'php -q server.php'
クライアントをlocalhost:12345に接続します