babytree-com / httpclient
There is no license information available for the latest version (0.0.0) of this package.
REAL async http/https client for php
0.0.0
2019-05-29 08:30 UTC
Requires
- react/http: ^0.8.4
- react/socket: ^1.2
This package is not auto-updated.
Last update: 2024-10-11 09:47:40 UTC
README
绝大部分互联网公司的php-fpm都跑在单进程单线程模式下,随着微服务架构的兴起,普通的curl已经不能满足复杂业务场景的需求。而curl_multi和guzzle尽管支持多个http请求的异步执行,但是它们的api对后端开发同学并不友好。
babytree-com/httpclient是宝宝树在复杂业务场景下积累的php http客户端。
特性
- http请求和业务代码可以异步执行
- 多个http请求可以异步执行
- 满足psr规范
- 比guzzle、curl_multi更友好的api
- 全中文文档
- 线上复杂业务场景下的考验
其中,http请求和业务代码的异步执行,是curl_multi和guzzle所不支持的。使用httpclient,在复杂业务场景下,可以将总体代码运行时间进一步缩短,进而提高QPS。
依赖
- php 7.0+
- 如果要进行单元测试,需要安装phpunit和go
安装
composer install babytree-com/httpclient 1.0.0
使用方法
基础用法
use BPF\HttpClient\Psr\RequestOptions; use BPF\HttpClient\RequestClient; $options = array( // some options ); $request_uniq = $request_client->addRequest($some_api, $options, RequestClient::MODE_ASYNC); $ret = $request_client->getResponse($request_uniq); // 对请求结果进行业务操作 // ...
业务逻辑和http请求异步
use BPF\HttpClient\Psr\RequestOptions; use BPF\HttpClient\RequestClient; $options = array( // some options ); $request_uniq = $request_client->addRequest($some_api, $options, RequestClient::MODE_ASYNC); // 这里可以放可以和请求并行处理的业务逻辑 // some business code $ret = $request_client->getResponse($request_uniq); // 对请求结果进行业务操作 // ...
多个请求异步
use BPF\HttpClient\Psr\RequestOptions; use BPF\HttpClient\RequestClient; $request_client = new RequestClient(); $options = array( // some options ); $multi_urls = array( $api1, $api2, $api3, ... ); $request_list = array(); foreach ($multi_urls as $url) { $request_uniq = $request_client->addRequest($url, $options, RequestClient::MODE_ASYNC); $request_list[$request_uniq] = $request_uniq; } // 这里可以放可以和请求并行处理的业务逻辑 // some business code do { $request_uniq = null; try { $ret = $request_client->selectGetAsyncResponse($request_uniq, null); } catch (\Exception $e) { } if ($request_uniq && isset($request_list[$request_uniq])) { unset($request_list[$request_uniq]); } if (!$request_list) { break; } } while (true); // 对请求结果进行业务操作 // ...
运行单元测试
phpunit tests ./
选项
TODO: 列出选项,如果有必要,可以写个例子
范例
上传文件
TODO: 上传文件的例子