PHP实现异步请求的四种方法
2026/4/6 13:24:39 网站建设 项目流程
PHP中的cURL可用于发起 HTTP 请求通常同步地等待服务器响应。如果你想要实现异步操作即 PHP 程序继续执行而无需等待 cURL 请求完成你可以考虑以下几种方式使用curl_multicURL 提供了设置curl_multi和curl_multi_exec来同时处理多个请求这种方式下你需要编写回调函数来处理每个请求的结果。12345678910111213141516171819202122232425262728$urls [http://example.com/api/endpoint1,http://example.com/api/endpoint2,// ...更多URLs];$multiHandle curl_multi_init();foreach($urlsas$url) {$ch curl_init();curl_setopt($ch, CURLOPT_URL,$url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_multi_add_handle($multiHandle,$ch);}$running null;do{usleep(10000);// 可选防止CPU全速运行curl_multi_exec($multiHandle,$running);}while($running 0);foreach($urlsas$url) {$ch curl_multi_getcontent($ch);// 处理结果curl_multi_remove_handle($multiHandle,$ch);}curl_multi_close($multiHandle);使用 pthreads虽然 PHP 自身并不是原生支持多线程的语言但是可以借助 pthreads 扩展创建并管理线程让 cURL 在另一个线程里运行。1234567891011121314151617181920?phprequirevendor/autoload.php;$promisenew\React\Promise\Promise(function($resolve,$reject) {// 创建 cURL 操作$ch curl_init();// 设置请求选项...curl_setopt($ch, CURLOPT_URL,http://example.com);// 创建一个新的 React 异步客户端$clientnew\React\Curl\Adapter\Curl();// 使用 React 异步库发起请求$response$client-enqueue($ch);// 当请求完成后调用 resolve 或 reject 函数$response-then(function($result)use($resolve) {$resolve(json_decode($result)); },function($error)use($reject) {$reject($error); });});// 同时主线程继续执行其他任务$promise-wait();// 当 cURL 完成后此处阻塞?使用Guzzle库Guzzle是一个功能强大的HTTP客户端库可以用于发送异步HTTP请求。它提供了方便的接口和功能使得发送异步请求变得更加简单。以下是一个使用Guzzle库发送异步请求的示例代码12345678910$clientnew\GuzzleHttp\Client();$promises [api1$client-getAsync(http://example.com/api1),api2$client-getAsync(http://example.com/api2),];$results \GuzzleHttp\Promise\Utils::settle($promises)-wait();$response1$results[api1][value]-getBody()-getContents();$response2$results[api2][value]-getBody()-getContents();// 处理响应数据// …上述代码通过GuzzleHttp\Client类初始化一个HTTP客户端实例然后使用getAsync方法发送异步GET请求并将返回的Promise对象存储在$promises数组中。接着通过\GuzzleHttp\Promise\Utils::settle方法等待所有的Promise对象并通过getBody方法获取响应数据。最后可以对获取到的响应数据进行处理。使用Swoole扩展Swoole是一个高性能的异步并行网络通信框架可以用于实现PHP的异步编程。通过使用Swoole扩展可以轻松实现异步请求。以下是一个使用Swoole扩展发送异步请求的示例代码1234567891011$cli1newSwoole\Coroutine\Http\Client(example.com, 80);$cli1-set([timeout 10]);$cli1-get(/api1);$cli2newSwoole\Coroutine\Http\Client(example.com, 80);$cli2-set([timeout 10]);$cli2-get(/api2);Swoole\Event::wait();$response1$cli1-body;$response2$cli2-body;// 处理响应数据// …上述代码使用Swoole\Coroutine\Http\Client类初始化两个HTTP客户端实例然后通过get方法发送异步GET请求。接着通过Swoole\Event::wait方法等待所有的请求完成并通过body属性获取响应数据。最后可以对获取到的响应数据进行处理。总结以上是几种常用的在PHP中实现异步请求的方法可以根据具体的需求选择合适的方法来实现异步化。总的来说PHP实现异步请求有多种方法可供选择每种方法都有其特点和适用场景。选择合适的方法取决于具体的需求和项目情况。到此这篇关于PHP实现异步请求的四种方法的文章就介绍到这了

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询