我需要使用异步套接字连接远程服务器并检索数据。我可以成功连接,但是出现了问题。
数据包会分成几个部分发送。我有两个选择:我可以设置一个缓冲区并一次性获取整个数据包,或在传输完成后将这些部分组合起来。我认为第一种选项(缓冲区)是正确的方法。
我正在定义一个缓冲区大小,但在第一部分中它不起作用。在其他部分中,它可以正常工作,但使用这种方法我无法在一次操作中获得整个数据包,因为第一部分受到限制,最多只能传输5.24 Kb的数据。
以下是我的代码:
我尝试在
提前感谢。
数据包会分成几个部分发送。我有两个选择:我可以设置一个缓冲区并一次性获取整个数据包,或在传输完成后将这些部分组合起来。我认为第一种选项(缓冲区)是正确的方法。
我正在定义一个缓冲区大小,但在第一部分中它不起作用。在其他部分中,它可以正常工作,但使用这种方法我无法在一次操作中获得整个数据包,因为第一部分受到限制,最多只能传输5.24 Kb的数据。
以下是我的代码:
$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) {
这行下定义了缓冲区大小,但是显然失败了。我不知道该如何正确处理它。提前感谢。