`

关于php curl支持并发请求,并毫秒控制超时

    博客分类:
  • PHP
阅读更多
为什么这么做?
目前的接口话的服务调用,为了保证性能和稳定性,我们都会对调用的第三方接口做并发,超时控制。

代码实现(网上找的现成的)
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批量请求url

    在PHP开发中,cURL库是一个非常强大的工具,用于处理HTTP和其他协议的网络请求。它允许程序员模拟浏览器的行为,发送GET、POST等不同类型的HTTP...通过合理的并发控制和错误处理,我们可以安全、高效地完成批量请求。

    简单实用的PHP并发请求url类

    以下是一个关于PHP实现并发URL请求的知识点详解: 1. **多线程与多进程**: 在PHP中,由于其默认是单线程的,我们不能直接利用多线程或多进程进行并发操作。但是,可以借助于`pthreads`扩展(仅在ZTS模式下可用)...

    PHPcurl模拟IP浏览器请求

    PHPcurl模拟IP浏览器请求是通过PHP的cURL扩展来实现的,它允许开发者发送HTTP请求,并自定义各种请求头,包括伪装成不同的浏览器以及设置源IP地址。下面将详细介绍这一技术及其相关知识点。 首先,我们要了解cURL是...

    cpp-并行执行http请求支持超时设置

    总的来说,理解和实现"cpp-并行执行http请求支持超时设置"涉及到对网络编程基础、并发控制、超时管理以及HTTP协议的理解。通过这个主题,开发者可以提升其在C/C++环境中编写高效、健壮网络应用的能力。

    swoole#swoole-wiki#7.5.1 - CURL发送POST请求服务器端超时1

    使用Nginx做前端代理,由Nginx处理100-Continue重新编译Swoole启用100-Continue的支持,需要手工修改swoole_config

    php curl 长连接的实现

    此外,还可以通过`CURLOPT_CONNECTION_TIMEOUT`设置连接超时时间,以控制连接保持多久有效。如果超过这个时间没有新的请求,cURL会自动关闭连接。 ### 性能提升分析 长连接对于频繁请求同一个域名和端口的场景尤其...

    Qt工程中使用curl进行网络请求,最小程序

    在本文中,我们将深入探讨如何在Qt工程中利用curl库进行网络请求,这是一个最小化的示例,可以帮助开发者了解如何将curl集成到Qt项目中。首先,让我们了解一下curl库和Qt框架的基本概念。 **curl库介绍** curl是一...

    php中curl模拟并发经典多线程

    这是一个经典的curl模拟多线程操作,缺点是总耗费时间取决于最慢的一个响应,网上有很多,只是用代码实现了一下,这是一个获取搜狗rank的示例

    Qt工程中用curl发送post请求,发送json返回json

    在Qt工程中,使用curl库发送POST请求并处理JSON数据是一项常见的任务,特别是在与Web服务交互时。这里我们将深入探讨如何实现这一功能。 首先,`curl`是一个强大的命令行工具和库,用于传输数据,支持多种协议,...

    curlAction.class_oracle_phpCURL请求类_

    - `curl_setopt()`:设置 `cURL` 选项,如 URL、请求类型(GET、POST等)、超时时间等。 - `curl_exec()`:执行 `cURL` 请求。 - `curl_getinfo()`:获取请求后的信息,如响应码、传输速度等。 - `curl_close()`...

    简单使用curl进行get请求并将服务器返回存进本地文件

    本文将详细介绍如何使用`curl`进行简单的GET请求,并将服务器的响应内容保存到本地文件。 首先,我们需要理解GET请求是HTTP协议中最基础的一种请求方法,它用于从服务器获取资源。在`curl`命令中执行GET请求非常...

    curl 发送HEAD请求时的数据包

    现象:curl 发送HEAD请求时会卡主很慢。 原因:curl接收到的内容小于Content-Length时,就会一直等待接收内容,直到超时(默认5分钟)。

    PHP使用curl_multi实现并发请求的方法示例

    此外,`curl_multi`还支持错误处理和回调函数,使得我们可以更精细地控制并发请求的流程,实现更复杂的功能。在实际项目中,可以根据需求对`CurlMultiUtil`类进行扩展和优化,例如添加错误处理机制、限制并发请求...

    php扩展 php_curl

    在Windows系统中,这些文件必须在系统的PATH环境变量所包含的目录下,或者与PHP可执行文件在同一目录下,才能确保PHP能够正确地加载并使用`php_curl`扩展。 **二、php_curl.dll** php_curl.dll是`php_curl`扩展的...

    用CURL来发送HTTP请求的方法

    它不仅支持客户端从服务器请求数据,也允许客户端向服务器发送数据。HTTP请求由客户端发起,包含一个方法(例如GET、POST或HEAD),一组请求头,以及可选的消息体。服务器则以状态行、响应头及响应体的形式作出响应...

    PHP Curl 请求API

    利用PHP中的 Curl 请求API PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。 libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl...

    Windows使用curl发送http请求,json报文。

    Windows使用curl发送http请求,json报文。

    CUrlHttp封装curl类

    虽然curl库本身不直接支持多线程,但开发者可以通过CUrlHttp类创建多个实例并发执行请求,或者使用curl_multi接口实现批量请求。 8. **自定义回调函数** 通过`setOpt(CURLOPT_WRITEFUNCTION)`和`setOpt(CURLOPT_...

    curl 不支持https解决方法

    curl 不支持https 请求 windows系统file_get_contents返回false远程phpstudy

    android jni使用curl进行http请求和文件下载

    在Android开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他编程语言(如C++)进行交互。...在实际项目中,你还可以根据需求扩展功能,比如支持POST请求、处理headers、设置cookies等。

Global site tag (gtag.js) - Google Analytics