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