我必须使用异步套接字连接连接远程服务器并检索数据。我可以连接,但有问题。
包裹是按件发送的。我有两个选择;我可以设置一个缓冲区并将整个包裹放在一个整体中,或者在所有转移完成后组合起来。我认为第一个选项(缓冲的东西)是正确的方法。
我正在定义缓冲区大小,但它在第一部分不起作用。在其他部分,它可以工作,但使用这种方法我无法将整个包整合在一起,因为第一部分限制为 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) {
line 下定义一个缓冲区大小,但你猜它失败了。我不知道如何正确处理它。
提前致谢。