webman 使用 http-client 携程请求
参考https://www.workerman.net/q/10702
composer require workerman/workerman v5.0.0-beta.7 revolt/event-loop ^1.0.0 workerman/http-client ^2.0.0
public static function RequestPost(string $backUrl, array $data, Logger $log): void
{
$http = new \Workerman\Http\Client();
$response = $http->request($backUrl, [
'method' => 'POST',
'version' => '1.1',
'headers' => ['Content-Type' => 'application/json',],
'data' => json_encode($data)
]);
echo $response->getBody();
}
我用postAPI工具请求 直接阻塞了
协程并不能加速单个请求,协程只是提高服务端并发处理能力。所以在postAPI工具端看到单个请求是阻塞的很正常。
比如$backurl请求需要1秒返回,你用curl的话一个进程1秒只能处理一个$backurl请求,用http-client则一秒可以处理N个$backurl请求,但是单个postAPI请求结果仍然是1秒。
我测试的时候没有返回结果,这并不是我的预期,
echo $response->getBody(); 只会打印在控制台,不会返回结果的。
按照手册返回结果要用 return $response->getBody();
wokermen是独立的,需要请求A服务器,并发数也会受A服务器的子进程务限制,那么我直接同步请求A服务器跟异步请求A服务器有什么区别?不都要执行子进程数量么
同步请求会等待返回结果,异步请求不等待返回结果,
刚开始我看文档也以为在webman 中同步请求不会阻塞进程,试了下 同步会阻塞进程,异步不会阻塞进程
我后面改用GuzzleHttp了