假设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设置的参数来额外处理
testAsync方法里
return response()->withHeaders(["Transfer-Encoding" => "chunked",]);
这个只是返回一个http头,包体部分是
$connection->send()
异步返回的。这种写法可以提高并发谢谢 知道了,但是调用方还是需要额外处理Transfer-Encoding才行了