Мне нужно подключить удаленный сервер с асинхронным подключением к сокету и получить данные. Я могу подключиться, но есть проблема.
Посылки отправляются поштучно. У меня есть два варианта; Я могу установить буфер и получить весь пакет одним куском или объединить части, когда все пересылки будут завершены. Я думаю, что первый вариант (буфер) - правильный путь.
Я определяю размер буфера, но он не работает в первой части. В других частях это работает, но с помощью этого метода я не могу получить весь пакет одним куском, потому что первая часть ограничена 5,24 Кб.
Вы можете найти мой код ниже:
$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) {
, но, как вы догадываетесь, это не удалось. Я не знаю, как справиться с этим правильно.
Заранее спасибо.