2
私はラチェットWebSocketServerをバックエンドで実行していますが、これは問題なく動作しています。PHPを使用してラチェットwebsocketサーバーに接続
<?php
require '../vendor/autoload.php';
use Ratchet\WebSocket\WsServer;
use Ratchet\Http\HttpServer;
$wsServer = new WsServer(new Chat());
$wsServer->disableVersion(0);
$server = \Ratchet\Server\IoServer::factory(
new HttpServer(
$wsServer
),
8080
);
$server->run();
しかし、プレーンなPHPスクリプトを使用してwebsocketに接続して、サーバーにメッセージを送信したいとします。
$host = 'ws://localhost'; //where is the websocket server
$port = 8080;
$local = "http://example.com"; //url where this script run
$data = "first message"; //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:$port"."\r\n".
"Sec-WebSocket-Key: asdasdaas76da7sd6asd6as7d"."\r\n".
"Content-Length: ".strlen($data)."\r\n"."\r\n";
//WebSocket handshake
$sock = fsockopen($host, $port);
fwrite($sock, $head) or die('error:'.$errno.':'.$errstr);
$headers = fread($sock, 2000);
echo $headers;
fwrite($sock, $data) or die('error:'.$errno.':'.$errstr);
$wsdata = fread($sock, 2000);
fclose($sock);
しかし、私が受け取るエラーはです。
error:32744:Unable to find the socket transport "ws" - did you forget to enable it when you configured PHP?
次に、私はホストを変更し、ws://を使用しないと言います。
error:111:Connection refused
誰がどのようにプレーンなPHPファイルから実行しているラチェットのWebSocketサーバーにデータを送信するためにアイデアを持っていますか?
@ Raisin.can私たちはこのライブラリを使ってバイト配列をPHPのwebsocketで送ることができます – iCoders
ライブラリは、send()関数が文字列を渡すことを期待しています。 PHPを使用しているサーバー(ラチェットなど)の場合は、クライアント上でバイト配列をシリアル化して、サーバーでシリアル化を解除することができます。ラチェットで受け取ったすべてのメッセージがバイト配列になるわけではない場合は、byte_array:a:44:{i:1; i:84; ...等。 – RaisinBranCrunch
yaもし私がseializeして文字列として送信するが、私にとっては受信側はバイト配列なのでシリアルはできません。 – iCoders