Reactphp无法获取流中的总数据
Reactphp can't get total data on stream
我正在使用 reactphp 库,并且我正在使用发送不同大小的包的设备。我的问题是当我获取数据时
$stream->on('data', function ($data, React\Stream\ReadableStreamInterface $stream) {
$this->respuesta .= $data;
$stream->close();
});
我只得到了第一个包裹的一部分。有没有办法一直等到设备发送完所有数据?
在这里,wireshark capture 最后一个包是我无法通过 React 获得的包。
$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($this->host, $this->port)->then(function (React\Stream\Stream $stream) use ($hex) {
$stream->write($hex);
$stream->on('data', function ($data, React\Stream\ReadableStreamInterface $stream) {
$this->respuesta .= $data;
$stream->close();
});
});
$loop->run();
您似乎在收到数据后立即关闭连接...您应该保持此连接打开,直到收到所有数据。数据事件在接收到一些数据后调度,而不是所有数据。
通常这是特定于实现的,如果您处理 RPC 样式 api,发送请求的客户端可能不关心来自服务的确认并在发送数据后切断连接;在这种情况下,您应该在数据事件上累积缓冲区,然后在结束事件上处理它。
如果你想保持连接打开,并发送离散的信息块,通常你要么用包的大小引导数据包,让你知道在处理之前要填充多少缓冲区,或者您可以发送一个分隔符(通常是一个空字节)来标记包的结尾。
我正在使用 reactphp 库,并且我正在使用发送不同大小的包的设备。我的问题是当我获取数据时
$stream->on('data', function ($data, React\Stream\ReadableStreamInterface $stream) {
$this->respuesta .= $data;
$stream->close();
});
我只得到了第一个包裹的一部分。有没有办法一直等到设备发送完所有数据?
在这里,wireshark capture 最后一个包是我无法通过 React 获得的包。
$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($this->host, $this->port)->then(function (React\Stream\Stream $stream) use ($hex) {
$stream->write($hex);
$stream->on('data', function ($data, React\Stream\ReadableStreamInterface $stream) {
$this->respuesta .= $data;
$stream->close();
});
});
$loop->run();
您似乎在收到数据后立即关闭连接...您应该保持此连接打开,直到收到所有数据。数据事件在接收到一些数据后调度,而不是所有数据。
通常这是特定于实现的,如果您处理 RPC 样式 api,发送请求的客户端可能不关心来自服务的确认并在发送数据后切断连接;在这种情况下,您应该在数据事件上累积缓冲区,然后在结束事件上处理它。
如果你想保持连接打开,并发送离散的信息块,通常你要么用包的大小引导数据包,让你知道在处理之前要填充多少缓冲区,或者您可以发送一个分隔符(通常是一个空字节)来标记包的结尾。