2

ポート8973で接続を受け入れるWebソケットサーバー(python + Tornado)が動作しています。次のような簡単なJavaScript / jquery命令で接続できます。

ws = new WebSocket("ws://192.168.41.170:8973/rt");

しかし、この websocket サーバーに接続してメッセージを送信するには、php スクリプトが必要です。次のような最も利用可能なソリューションをすべて試しました

https://github.com/lemmingzshadow/php-websocket/

$host = '192.168.41.170';  //where is the websocket server
$port = 8973;
$local = "http://192.168.41.2/";  //url where this script run
$data = 'hello world!';  //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"
fclose($sock);

しかし、これはすべて機能しません。動作するコード スニペットを持っている人はいますか? php-websocket サーバーは必要ありません。ありがとう

4

1 に答える 1

0

あなたの問題は、データのパッキング方法にあると思います。どのプロトコルを使用しようとしているのかを知らなければ、それをどのようにパックするかを教えることはできません! ただし、この質問に対する 1 つの回答に、機能するコード スニペットがあります。

于 2013-06-11T17:53:46.920 に答える