使用cURL Multi、Swoole协程或GuzzleHTTP可实现PHP并发请求。首先推荐cURL Multi,通过curl_multi_init并发执行多个请求,显著降低总耗时;其次Swoole协程以同步写法实现异步性能,适合高并发场景;最后Guzzle结合Promise支持异步请求,便于框架集成。需注意控制并发数、设置超时、完善错误处理,并结合缓存与队列优化性能。根据环境选择方案:传统项目用cURL Multi,高性能选Swoole,集成推荐Guzzle。

PHP本身并不支持多线程,但可以通过扩展或模拟方式实现并发请求,提升API处理效率。最常用的方法是使用pthreads(仅限于Zend Engine的线程安全版本)或借助curl_multi_*函数进行异步HTTP请求。下面介绍几种实用方案。
使用cURL Multi实现并发请求
这是最常见且兼容性最好的方法,适用于大多数PHP环境。通过curl_multi_init()可以同时发起多个API请求,避免串行等待。
示例代码:
$handles = [];
$multi = curl_multi_init();
// 添加多个请求
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multi, $ch);
$handles[] = $ch;
}
// 执行并发请求
$running = 0;
do {
curl_multi_exec($multi, $running);
curl_multi_select($multi);
} while ($running > 0);
// 获取结果
$results = [];
foreach ($handles as $ch) {
$results[] = curl_multi_getcontent($ch);
curl_multi_remove_handle($multi, $ch);
curl_close($ch);
}
curl_multi_close($multi);
这种方式能显著减少总响应时间。比如5个各需1秒的请求,串行要5秒,而并发通常在1.2秒内完成。
立即学习“PHP免费学习笔记(深入)”;
使用Swoole协程实现高效并发
Swoole是一个现代PHP扩展,支持协程和异步IO,适合高并发场景。它用同步写法实现异步性能,开发体验友好。
示例(需安装Swoole):
use Swoole\Coroutine;
Coroutine\run(function () {
$results = [];
$clients = [];
foreach ($urls as $url) {
$client = new Coroutine\Http\Client('example.com', 80);
$client->set(['timeout' => 5]);
$client->get(parse_url($url, PHP_URL_PATH));
$clients[] = $client;
}
foreach ($clients as $client) {
$results[] = $client->getBody();
$client->close();
}
});
Swoole协程调度轻量,资源消耗低,适合微服务聚合、批量数据抓取等场景。
使用GuzzleHTTP + HandlerStack实现并发
Guzzle是一个流行的HTTP客户端库,结合其异步功能可轻松管理并发请求。
示例:
$client = new \GuzzleHttp\Client();
$promises = array_map(function ($url) use ($client) {
return $client->getAsync($url);
}, $urls);
$results = \GuzzleHttp\Promise\settle($promises)->wait();
每个请求返回一个Promise对象,并发执行。完成后可通过判断状态获取数据。适合已有Guzzle项目集成。
注意事项与性能建议
虽然并发提升了效率,但也需注意以下几点:
- 控制并发数量,避免系统资源耗尽或目标API限流
- 设置合理的超时时间,防止长时间阻塞
- 错误处理要完善,网络波动可能导致部分请求失败
- 生产环境建议配合缓存、队列机制,进一步优化整体性能
基本上就这些。根据实际环境选择合适方案:传统项目用curl_multi,高性能需求选Swoole,框架集成推荐Guzzle。关键是避免阻塞式调用,释放PHP的并发潜力。











