webman 使用 http-client 携程请求

lsmir2

问题描述

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工具请求 直接阻塞了

1026 2 1
2个回答

sm2010

协程并不能加速单个请求,协程只是提高服务端并发处理能力。所以在postAPI工具端看到单个请求是阻塞的很正常。
比如$backurl请求需要1秒返回,你用curl的话一个进程1秒只能处理一个$backurl请求,用http-client则一秒可以处理N个$backurl请求,但是单个postAPI请求结果仍然是1秒。

  • lsmir2 2024-06-09

    我测试的时候没有返回结果,这并不是我的预期,

  • sm2010 2024-06-09

    echo $response->getBody(); 只会打印在控制台,不会返回结果的。
    按照手册返回结果要用 return $response->getBody();

  • tangmingliang8 2024-09-01

    wokermen是独立的,需要请求A服务器,并发数也会受A服务器的子进程务限制,那么我直接同步请求A服务器跟异步请求A服务器有什么区别?不都要执行子进程数量么

  • lsmir2 2024-09-01

    同步请求会等待返回结果,异步请求不等待返回结果,

  • yoohop 6天前

    刚开始我看文档也以为在webman 中同步请求不会阻塞进程,试了下 同步会阻塞进程,异步不会阻塞进程

lsmir2

我后面改用GuzzleHttp了

  • 暂无评论
×
🔝