前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP如何并行异步处理HTTP请求

PHP如何并行异步处理HTTP请求

作者头像
Tinywan
发布2024-05-20 14:55:08
510
发布2024-05-20 14:55:08
举报
文章被收录于专栏:开源技术小栈开源技术小栈

概述

在对接第三方接口时,有些接口可能会比较耗时,为了提高接口调用的效率,可以考虑使用异步请求。通过异步请求,可以在发起接口调用后立即返回结果,而不需要等待接口返回。

正常请求

代码语言:javascript
复制
<?php
/**
 * @desc go.php 描述信息
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/5/18 18:08
 */
declare(strict_types=1);

$url = 'http://127.0.0.1:8888/index/sync';
$timeOne = microtime(true);
foreach (range(1, 100) as $key) {
    $list[] = file_get_contents($url);
}
$timeTwo = microtime(true);
echo '[x] [系统调用耗时时间] ' . ($timeTwo - $timeOne) . PHP_EOL;

调用输出,可以看出循环请求100次,总耗时:37.23

代码语言:javascript
复制
[x] [系统调用耗时时间] 37.230930089951

并发请求

Guzzle是一个PHP的HTTP客户端,用来轻而易举地发送请求,并集成到我们的WEB服务上。

  • 接口简单:构建查询语句、POST请求、分流上传下载大文件、使用HTTP cookies、上传JSON数据等等。
  • 发送同步或异步的请求均使用相同的接口。
  • 使用PSR-7接口来请求、响应、分流,允许你使用其他兼容的PSR-7类库与Guzzle共同开发。
  • 抽象了底层的HTTP传输,允许你改变环境以及其他的代码,如:对cURL与PHP的流或socket并非重度依赖,非阻塞事件循环。
  • 中间件系统允许你创建构成客户端行为。

这里可以使用Promise和异步请求来同时发送多个请求。

安装

代码语言:javascript
复制
compsoer require guzzlehttp/guzzle

伪代码

代码语言:javascript
复制
<?php
/**
 * @desc go.php 
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/5/18 18:08
 */
declare(strict_types=1);

require_once __DIR__ . '/../vendor/autoload.php';

use GuzzleHttp\Client;
use GuzzleHttp\Promise;

$requestData = [
    'username' => '开源技术小栈',
    'age' => 24
];

$url = 'http://127.0.0.1:8888/index/sync';
$header = [
    'Authorization' => 'Bearer xxxxxxxxxxxx'
];

$timeOne = microtime(true);
$client = new Client(['verify' => false]);
for ($i = 0; $i < 100; $i++) {
    $promises[$i] = $client->postAsync($url, ['headers' => $header, 'json' => $requestData]);
}

$responses = Promise\Utils::unwrap($promises);
foreach ($responses as $key => $response) {
    echo '【响应状态码】 : ' . $response->getStatusCode() . "\n";
}

$timeTwo = microtime(true);
echo '[x] [系统调用耗时时间] ' . ($timeTwo - $timeOne) . PHP_EOL;

调用输出,可以看出循环请求100次,总耗时:10.41

代码语言:javascript
复制
【响应状态码】 : 200
....
【响应状态码】 : 200
[x] [系统调用耗时时间] 10.412175893784

更多了解guzzlephp官方文档:https://docs.guzzlephp.org/en/stable/quickstart.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 正常请求
  • 并发请求
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档