使用 PHP 客户端连接到 websocket

新手上路,请多包涵

我正在尝试将基于 PHP 的客户端连接到 websocket 服务器。

这是我一直在使用的代码,它已在不同的论坛上广泛发布。但出于某种原因,我就是无法让它工作。

任何帮助,将不胜感激。

 $host = 'host';  //where is the websocket server
$port = 443; //ssl
$local = "http://www.example.com/";  //url where this script run
$data = '{"id": 2,"command": "server_info"}';  //data to be send

$head =        "GET / HTTP/1.1"."\r\n".
               "Upgrade: WebSocket"."\r\n".
               "Connection: Upgrade"."\r\n".
               "Origin: $local"."\r\n".
               "Host: $host"."\r\n".
               "Content-Length: ".strlen($data)."\r\n"."\r\n";
////WebSocket handshake
$sock = fsockopen($host, $port, $errno, $errstr, 2);
fwrite($sock, $head ) or die('error:'.$errno.':'.$errstr);
$headers = fread($sock, 2000);
fwrite($sock, "\x00$data\xff" ) or die('error:'.$errno.':'.$errstr);
$wsdata = fread($sock, 2000);  //receives the data included in the websocket package "\x00DATA\xff"
$retdata = trim($wsdata,"\x00\xff"); //extracts data
////WebSocket handshake
fclose($sock);

echo $retdata;

原文由 John Whelan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 567
1 个回答

我可能更愿意使用现有的 websocket 客户端库(可能是 https://github.com/gabrielbull/php-websocket-clienthttps://github.com/Devristo/phpws/tree/master/src/Devristo/Phpws /客户端?)而不是自己滚动,但我至少通过以下方式连接它:

 $head = "GET / HTTP/1.1"."\r\n".
    "Host: $host"."\r\n".
    "Upgrade: websocket"."\r\n".
    "Connection: Upgrade"."\r\n".
    "Sec-WebSocket-Key: asdasdaas76da7sd6asd6as7d"."\r\n".
    "Sec-WebSocket-Version: 13"."\r\n".
    "Content-Length: ".strlen($data)."\r\n"."\r\n";

我的服务器使用的是 TLS/SSL,所以我还需要:

 $sock = fsockopen('tls://'.$host, $port, $errno, $errstr, 2);

完整的协议规范是: https ://tools.ietf.org/rfc/rfc6455.txt

原文由 singpolyma 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏