非同期ソケット接続でリモート サーバーに接続し、データを取得する必要があります。接続できますが、問題があります。
パッケージは分割して送信されます。2 つのオプションがあります。バッファーを設定して、すべての転送が完了したら、パッケージ全体を 1 つにまとめたり、断片を結合したりできます。最初のオプション(バッファのこと)が正しい方法だと思います。
バッファ サイズを定義していますが、最初の部分では機能しません。他の部分では機能しますが、この方法では、最初の部分が 5,24 KB に制限されているため、パッケージ全体を 1 つにまとめることはできません。
以下の私のコードを見つけることができます:
$loop = React\EventLoop\Factory::create();
$dnsResolverFactory = new React\Dns\Resolver\Factory();
$dns = $dnsResolverFactory->createCached('8.8.8.8', $loop);
$connector = new React\SocketClient\Connector($loop, $dns);
$connector->create( ENDPOINT_IP , ENDPOINT_PORT )->then(function (React\Stream\Stream $stream) use ($loop) {
$command = '{C:"EL",bmId:43,inst:"my_instance",tok:"my_token"}';
$command_length = strlen($command);
$command_length = pack("N", $command_length);
$stream->write($command_length);
$stream->write($command);
$stream->bufferSize = 999999;
$stream->on('data', function ($data) {
$package = substr($data, 0, 4);
$unpack = unpack('N', $package); // I'm getting whole package size
echo $data;
});
});
$loop->run();
行の下にバッファサイズを定義しようとしました$stream->on('data', function ($data) {
が、ご想像のとおり失敗しました。正しい方法で処理する方法がわかりません。
前もって感謝します。