为什么这么做?
目前的接口话的服务调用,为了保证性能和稳定性,我们都会对调用的第三方接口做并发,超时控制。
代码实现(网上找的现成的)
public static function curlMultiRequest($urls, $options = array()) {
$ch= array();
$results = array();
$mh = curl_multi_init();
foreach($urls as $key => $val) {
$ch[$key] = curl_init();
if ($options) {
curl_setopt_array($ch[$key], $options);
}
curl_setopt($ch[$key], CURLOPT_URL, $val);
curl_multi_add_handle($mh, $ch[$key]);
}
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running > 0);
// Get content and remove handles.
foreach ($ch as $key => $val) {
$results[$key] = curl_multi_getcontent($val);
curl_multi_remove_handle($mh, $val);
}
curl_multi_close($mh);
return $results;
}
调用方式:
$urls = [
'http://www.baidu.com',
'http://www.qq.com'
];
$opts = [
CURLOPT_HEADER => false,
CURLOPT_TIMEOUT_MS => 50,//执行脚本超时
//CURLOPT_CONNECTTIMEOUT_MS => 50,//网络选址超时
CURLOPT_RETURNTRANSFER => true,
CURLOPT_NOSIGNAL => true, //这个是设定毫秒必须设定
];
curlMultiRequest($urls,$opts);
注意事项
1.支持毫秒 cURL 7.16.2中被加入。从PHP 5.2.3起可使用
2.CURLOPT_TIMEOUT_MS,CURLOPT_CONNECTTIMEOUT_MS 未定义时
if (!defined('CURLOPT_CONNECTTIMEOUT_MS')) {
define('CURLOPT_CONNECTTIMEOUT_MS', 156);
}
if (!defined('CURLOPT_TIMEOUT_MS')) {
define('CURLOPT_TIMEOUT_MS', 155);
}
参考资料:
- http://stackoverflow.com/questions/9062798/php-curl-timeout-is-not-working
- http://www.laruence.com/2014/01/21/2939.html
分享到:
相关推荐
在PHP开发中,cURL库是一个非常强大的工具,用于处理HTTP和其他协议的网络请求。它允许程序员模拟浏览器的行为,发送GET、POST等不同类型的HTTP...通过合理的并发控制和错误处理,我们可以安全、高效地完成批量请求。
以下是一个关于PHP实现并发URL请求的知识点详解: 1. **多线程与多进程**: 在PHP中,由于其默认是单线程的,我们不能直接利用多线程或多进程进行并发操作。但是,可以借助于`pthreads`扩展(仅在ZTS模式下可用)...
PHPcurl模拟IP浏览器请求是通过PHP的cURL扩展来实现的,它允许开发者发送HTTP请求,并自定义各种请求头,包括伪装成不同的浏览器以及设置源IP地址。下面将详细介绍这一技术及其相关知识点。 首先,我们要了解cURL是...
总的来说,理解和实现"cpp-并行执行http请求支持超时设置"涉及到对网络编程基础、并发控制、超时管理以及HTTP协议的理解。通过这个主题,开发者可以提升其在C/C++环境中编写高效、健壮网络应用的能力。
使用Nginx做前端代理,由Nginx处理100-Continue重新编译Swoole启用100-Continue的支持,需要手工修改swoole_config
此外,还可以通过`CURLOPT_CONNECTION_TIMEOUT`设置连接超时时间,以控制连接保持多久有效。如果超过这个时间没有新的请求,cURL会自动关闭连接。 ### 性能提升分析 长连接对于频繁请求同一个域名和端口的场景尤其...
在本文中,我们将深入探讨如何在Qt工程中利用curl库进行网络请求,这是一个最小化的示例,可以帮助开发者了解如何将curl集成到Qt项目中。首先,让我们了解一下curl库和Qt框架的基本概念。 **curl库介绍** curl是一...
这是一个经典的curl模拟多线程操作,缺点是总耗费时间取决于最慢的一个响应,网上有很多,只是用代码实现了一下,这是一个获取搜狗rank的示例
在Qt工程中,使用curl库发送POST请求并处理JSON数据是一项常见的任务,特别是在与Web服务交互时。这里我们将深入探讨如何实现这一功能。 首先,`curl`是一个强大的命令行工具和库,用于传输数据,支持多种协议,...
- `curl_setopt()`:设置 `cURL` 选项,如 URL、请求类型(GET、POST等)、超时时间等。 - `curl_exec()`:执行 `cURL` 请求。 - `curl_getinfo()`:获取请求后的信息,如响应码、传输速度等。 - `curl_close()`...
本文将详细介绍如何使用`curl`进行简单的GET请求,并将服务器的响应内容保存到本地文件。 首先,我们需要理解GET请求是HTTP协议中最基础的一种请求方法,它用于从服务器获取资源。在`curl`命令中执行GET请求非常...
现象:curl 发送HEAD请求时会卡主很慢。 原因:curl接收到的内容小于Content-Length时,就会一直等待接收内容,直到超时(默认5分钟)。
此外,`curl_multi`还支持错误处理和回调函数,使得我们可以更精细地控制并发请求的流程,实现更复杂的功能。在实际项目中,可以根据需求对`CurlMultiUtil`类进行扩展和优化,例如添加错误处理机制、限制并发请求...
在Windows系统中,这些文件必须在系统的PATH环境变量所包含的目录下,或者与PHP可执行文件在同一目录下,才能确保PHP能够正确地加载并使用`php_curl`扩展。 **二、php_curl.dll** php_curl.dll是`php_curl`扩展的...
它不仅支持客户端从服务器请求数据,也允许客户端向服务器发送数据。HTTP请求由客户端发起,包含一个方法(例如GET、POST或HEAD),一组请求头,以及可选的消息体。服务器则以状态行、响应头及响应体的形式作出响应...
利用PHP中的 Curl 请求API PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。 libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl...
Windows使用curl发送http请求,json报文。
虽然curl库本身不直接支持多线程,但开发者可以通过CUrlHttp类创建多个实例并发执行请求,或者使用curl_multi接口实现批量请求。 8. **自定义回调函数** 通过`setOpt(CURLOPT_WRITEFUNCTION)`和`setOpt(CURLOPT_...
curl 不支持https 请求 windows系统file_get_contents返回false远程phpstudy
在Android开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他编程语言(如C++)进行交互。...在实际项目中,你还可以根据需求扩展功能,比如支持POST请求、处理headers、设置cookies等。