webman http-client用法

sanergo

假设webman只能开一个进程
假设https://example.com的响应时间是1-10秒,可能根据传入的参数不同,响应时间也不同

public function test(Request $request) {
    $http = new Workerman\Http\Client();

    // 同步请求
    $response = $http->get('https://example.com/');
    // 同步请求是假设每次的响应时间都是10秒,那么处理的效率就只能依赖前一个请求的响应,依次处理
    return $response->getBody();
}

public function testAsync(Request $request) {
    $http = new Workerman\Http\Client();
    $connection = $request->connection;

    // 异步请求
    $http->get('https://example.com/', function ($response) use ($connection) {
        //$connection->send(new Chunk($response->getBody()));
        //$connection->send(new Chunk('')); // 发送空的的chunk代表response结束
    });

    //return response()->withHeaders(["Transfer-Encoding" => "chunked",]);
    //不太确定这里是立即返回还是保存的上下文信息以等待处理完成,看上面的return代码应该是立即返回
    // 如果是立即返回了,但是请求端希望拿到具体的响应结果,且不需要做额外的处理,就按正常的同步请求处理
}

请问testAsync应该怎么处理可以达到增加并发,而且不需要调用端额外处理?
或者只能根据header设置的参数来额外处理

290 1 1
1个回答

walkor

testAsync方法里
return response()->withHeaders(["Transfer-Encoding" => "chunked",]);
这个只是返回一个http头,包体部分是$connection->send()异步返回的。这种写法可以提高并发

  • sanergo 2024-09-19

    谢谢 知道了,但是调用方还是需要额外处理Transfer-Encoding才行了

×
🔝