php中curl_multi的应用

EEG/ERP新手必看:5本神经科学入门书籍推荐(附高清PDF下载) 本文为EEG/ERP研究新手推荐5本神经科学入门书籍,涵盖认知神经科学、数据分析、ERP技术等核心内容。特别推荐《认知神经科学—关于心智的生物学》和《事件相关电位基础》,这些书籍不仅提供理论框架,还包含实用案例和MATLAB代码,帮助研究者快速掌握脑电研究技术。附高清PDF下载,适合实验室小组学习。 阅读详情

相信许多人对php手册中语焉不详的curl_multi一族的函数头疼不已,它们文档少,给的例子 更是简单的让你无从借鉴,我也曾经找了许多网页,都没见一个完整的应用例子。

  • curl_multi_add_handle
  • curl_multi_close
  • curl_multi_exec
  • curl_multi_getcontent
  • curl_multi_info_read
  • curl_multi_init
  • curl_multi_remove_handle
  • curl_multi_select
  • 一般来说,想到要用这些函数时,目的显然应该是要同时请求多个url,而不是一个一个依次请求,否则不如自己循环去调curl_exec好了。

    步骤总结如下:

    第一步:调用curl_multi_init
    第二步:循环调用curl_multi_add_handle
    这一步需要注意的是,curl_multi_add_handle的第二个参数是由curl_init而来的子handle。
    第三步:持续调用curl_multi_exec
    第四步:根据需要循环调用curl_multi_getcontent获取结果
    第五步:调用curl_multi_remove_handle,并为每个字handle调用curl_close
    第六步:调用curl_multi_close

    这里有一个网上找的简单例子,其作者称为dirty的例子,(稍后我会说明为何dirty):

    /*
    Here's a quick and dirty example for curl-multi from PHP, tested on PHP 5.0.0RC1 CLI / FreeBSD 5.2.1
    */

    $connomains   =   array (
    " http://www.cnn.com/ " ,
    " http://www.canada.com/ " ,
    " http://www.yahoo.com/ "
    );

    $mh   =  curl_multi_init();

    foreach  ( $connomains   as   $i   =>   $url ) {
         
    $conn [ $i ] = curl_init( $url );
          curl_setopt(
    $conn [ $i ] , CURLOPT_RETURNTRANSFER , 1 );
          curl_multi_add_handle (
    $mh , $conn [ $i ]);
    }

    do  {  $n = curl_multi_exec( $mh , $active ); }  while  ( $active );

    foreach  ( $connomains   as   $i   =>   $url ) {
          
    $res [ $i ] = curl_multi_getcontent( $conn [ $i ]);
          curl_close(
    $conn [ $i ]);
    }

    print_r ( $res );

     

    整个使用过程差不多就是这样,但是,这个简单代码有个致命弱点,就是在do循环的那段,在整个url请求期间是个死循环,它会轻易导致CPU占用100%。

    现在我们来改进它,这里要用到一个几乎没有任何文档的函数curl_multi_select了,虽然C的curl库对select有说明,但是,php里的接口和用法确与C中有不同。

    把上面do的那段改成下面这样:

                     do  {
                            
    $mrc   =  curl_multi_exec( $mh , $active );
                    } 
    while  ( $mrc   ==  CURLM_CALL_MULTI_PERFORM);
                    
    while  ( $active  and  $mrc   ==  CURLM_OK) {
                            
    if  (curl_multi_select( $mh !=   - 1 ) {
                                    
    do  {
                                            
    $mrc   =  curl_multi_exec( $mh ,   $active );
                                    } 
    while  ( $mrc   ==  CURLM_CALL_MULTI_PERFORM);
                            }
                    }

    因为$active要等全部url数据接受完毕才变成false,所以这里用到了curl_multi_exec的返回值判断是否还有数据,当有数据的时候就不停调用curl_multi_exec,暂时没有数据就进入select阶段,新数据一来就可以被唤醒继续执行。这里的好处就是CPU的无谓消耗没有了。

    另外:还有一些细节的地方可能有时候要遇到:

    控制每一个请求的超时时间,在curl_multi_add_handle之前通过curl_setopt去做:
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

    判断是否超时了或者其他错误,在curl_multi_getcontent之前用:curl_error($conn[$i]);

嵌入式开发新思路:用QP框架5步搞定状态机设计(附STM32移植指南) 本文介绍了在嵌入式开发中使用QP框架进行状态机设计的新思路。通过对比传统RTOS与事件驱动模型的差异,详细解析了QP框架的核心组件与优势,并提供了基于STM32的5步实战指南,包括环境搭建、状态机实现与性能优化技巧,帮助开发者从顺序阻塞思维转向高效的事件驱动架构。 阅读详情

相关推荐

PHP使用CURL MULTI实现并发采集的例子

在本文中,我们将介绍如何使用PHPCURL MULTI功能来实现并发采集。CURL MULTI是一个强大的工具,可以让我们同时发起多个HTTP请求,并在它们完成时获取结果。通过利用CURL MULTI功能,我们可以在PHP中轻松实现并发的HTTP请求,从而提高数据采集的效率。我们使用一个循环来持续执行该函数,直到所有请求都完成。接下来,我们创建了多个CURL句柄,并为每个句柄设置URL和其他必要的选项。在上面的代码中,我们首先创建了一个CURL MULTI句柄。函数将每个CURL句柄添加到批处理句柄中。

. 468

php中的curl_multi系列函数使用例子

相信许多人对php手册中语焉不详的curl_multi一族的函数头疼不已,它们文档少,给的例子 更是简单的让你无从借鉴,我也曾经找了许多网页,都没见一个完整的应用例子。 curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select 一般来说,想到要用这些函数时,目的显然应该是要同时请求多个url,而不是一个一个依次

爱普生l4150l41604151l4153l4156l4158l4163l4166l4167l4168l4169清零

爱普生l4150l41604151l4153l4156l4158l4163l4166l4167l4168l4169清零软件+图解.zip

curl_multi异步高并发服务实现

libcurl-easy方式是阻塞执行请求,当请求数量过大,或者需要高并发请求时,同步阻塞模式就会显示出性能瓶颈,执行效率低,延时严重,CPU占用率高,程序阻塞卡顿。所以采用异步方式,可以实现高并发请求的应用场景,异步可以在单线程中同时执行多个请求,等待curl文件标志或者自定义文件标志发生变化时,处理请求结果,支持在几千个平行连接上请求数据,基于事件处理结果。

baochunlei1的博客 5726

通过系统调用分析curl_multi运行原理 PHP

curl_multi 允许你可以并发的发起请求,再来逐个处理响应数据,说简单点就是利用了NIO + select / poll 涉及到的函数 1、curl_multi_exec 原型:curl_multi_exec ( resource $mh , int &$still_running ) : int 描述:处理在栈中的每一个句柄。无论该句柄需要读取或写入数据都可调用此方法。 就这,几个人能看懂是啥意思?示例中为何总是将它放在do…while中? $mh:连接集合。 $still_running:

猛犸象 2184

php多线程采集,php浏览器模拟:用于多线程处理的curl_multi一族函数使用介绍

最近写一个php采集类程序脚本,研究了snoopy采集类,同时在搜集相关资料时发现curl_multi可用于多线程,于是进行了测试,实践证明效果相对很好。例子可参考 花瓣网图片采集器。下面是相关知识介绍,仅作参考。curl_multi函数介绍php中的curl_multi一族函数可用于多线程处理等问题,包括如下函数:curl_multi_add_handlecurl_multi_closecurl...

weixin_39572168的博客 514

php+curlmultiinit_解析phpcurl_multi应用

相信许多人对php手册中语焉不详的curl_multi一族的函数头疼不已,它们文档少,给的例子 更是简单的让你无从借鉴,我也曾经找了许多网页,都没见一个完整的应用例子。•curl_multi_add_handle•curl_multi_close•curl_multi_exec•curl_multi_getcontent•curl_multi_info_read•curl_multi_init•c...

weixin_39682412的博客 247

phpcurl_multi应用 同时请求多个url

因为$active要等全部url数据接受完毕才变成false,所以这里用到了curl_multi_exec的返回值判断是否还有数据,当有数据的时候就不停调用curl_multi_exec,暂时没有数据就进入select阶段,新数据一来就可以被唤醒继续执行。现在我们来改进它,这里要用到一个几乎没有任何文档的函数curl_multi_select了,虽然C的curl库对select有说明,但是,php里的接口和用法确与C中有不同。第二步:循环调用curl_multi_add_handle。

liuliuhelingdao的博客 385

phpcurl_multi应用 --转

http://blog.csdn.net/oyd/article/details/1820615 相信许多人对php手册中语焉不详的curl_multi一族的函数头疼不已,它们文档少,给的例子 更是简单的让你无从借鉴,我也曾经找了许多网页,都没见一个完整的应用例子。 curl_multi_add_handle curl_multi_close curl_multi_exec c...

weixin_30839881的博客 94

php中的curl_multi应用php多进程)

相信许多人对PHP手册中语焉不详的curl_multi一族的函数头疼不已,它们文档少,给的例子更是简单的让你无从借鉴,我也曾经找了许多网页,都没见一个完整的应用例子。 curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_mult...

weixin_30508241的博客 174

curl_multi异步高并发服务

curl_multi_poll和curl_multi_wait区别有两个,一个是curl_multi_poll在被等待的时间内,可以调用curl_multi_wakeup激活,curl_multi_poll会加速返回。没有找到解决办法,可能和多线程调用有关。(4) 一次向multihand添加1000条任务,curl_multi_perform执行返回任务从1000降到0后,并不是所有分任务都执行完了,读取的数据也就600条左右,需要多次调用curl_multi_info_read去读取数据。

因热爱而执着,因执着而成功。 2182

curl_multi_info_read函数

参考: https://www.yuque.com/docs/share/76aa4192-d4e6-4560-90f7-f4532dac977c      

冷月醉雪的博客 3721

PHP并发请求优化:使用`curl_multi_select()`实现高效的多请求处理

通过使用和,我们可以大幅提升 PHP 中并发请求的处理效率,特别是当需要处理大量外部请求时。这种方法不仅能提高响应速度,还能有效降低系统资源的消耗,是非常适合大规模并发处理的解决方案。希望这篇文章能为大家提供一些帮助,如果有类似需求的开发者也可以尝试这个方法。有什么问题或建议,欢迎留言交流!

leptune99的博客 1549

libcurlcurl_multi_xxx接口

文章目录一、curl_multi_setopt二、curl_multi_perform三、curl_multi_wait四、curl_multi_info_read 一、curl_multi_setopt 原型:CURLMcode curl_multi_setopt(CURLM* multi_handle, CURLMoption option, param); 功能: 用于设置multi handle的选项。 可用版本库:7.15.4版本及以后。 CURLMOPT_PIPELINING 启用HTTP管道

hezhanran的博客 3905

PHP curl_multi_exec 并发请求

使用curl_multi_exec并发请求外部接口 有时候在一个PHP方法中要多次调用外部的接口,为了优化代码,提高效率,我们不妨使用curl_multi_exec并发处理多个请求,这样可以明显地提高获取响应数据的速度,减少程序执行的时间,下面是一个实际运行的例子。 <?php /** * 使用curl并行发送多个请求获取数据 * @param array $urls 多个请求数组 * @return array */ function sendMulti_request(arr

weixin_42413966的博客 701

curl_multi php,PHP异步并发执行multi cURL详解

官方提供的例子,一次执行多个连接,然后阻塞所有链接完成取内容,整个过程是阻塞的。

weixin_36379084的博客 586
上一篇: 回复:"个人宽带:除了下载、盗版还剩下什么"----网络本该是免费的
下一篇: 疾病的奥秘
oyd
oyd
博客等级 码龄24年 186粉丝 81原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值