curl_multi实现并发请求
2017-10-04 02:01
489 查看
1.要点如下(属个人理解,有问题及时指正)
参数active表示一个用来判断操作是否仍在执行的标识的引用,只有全部url数据接受完毕才变成false。curl_multi_select ( resource mh[,floattimeout = 1.0 ] ) 阻塞直到cURL批处理连接中有活动连接,默认阻塞1秒,成功时返回描述符集合中描述符的数量,失败时,select失败时返回-1。
这里用到了curl_multi_exec的返回值判断是否还有数据,当有数据的时候就不停调用curl_multi_exec,暂时没有数据,就进入select阶段,新数据一来就可以被唤醒继续执行,一般情况下,数据传输不会中断的话,基本参数mrc == CURLM_OK的时候,数据就全部接受完成了,参数active就等于false,特殊情况下才会出现上述问题,这里的好处就是在特殊情况下解决了CPU无谓消耗的问题。
2.官方文档案例
<?php // 创建一对cURL资源 $ch1 = curl_init(); $ch2 = curl_init(); // 设置URL和相应的选项 curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/"); curl_setopt($ch2, CURLOPT_HEADER, 0); // 创建批处理cURL句柄 $mh = curl_multi_init(); // 增加2个句柄 curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $active = null; // 执行批处理句柄 do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active && $mrc == CURLM_OK) { if (curl_multi_select($mh) != -1) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } // 关闭全部句柄 curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); ?>
相关文章推荐
- 通过curl库的curl_multi方法实现并发请求多个URL
- PHP使用curl_multi实现并发请求的方法示例
- get/post/curl/curl_multi_*并发请求
- curl_multi在抓取数据中的并发实现
- 通过curl的并发机制实现php批量网络请求
- curl_multi在抓取数据中的并发实现
- [转]curl_multi 实现准多进程发请求
- curl_multi_init 模拟并发请求
- php实现并发处理之curl篇
- PHP中使用CURL实现GET和POST请求
- PHP使用CURL_MULTI实现多线程采集的例子
- PHP中使用cURL实现Get和Post请求的方法
- PHP中使用cURL实现Get和Post请求的方法
- PHP 多线程的实现 curl_multi
- php之curl实现http与https请求的方法
- php中curl_multi的应用 同时请求多个url 【推荐】
- PHP中利用redis实现消息队列处理高并发请求
- curl 获取最后一次传输的http_code的应用和解决请求并发的问题
- PHP中使用cURL实现Get和Post请求的方法
- PHP使用curl请求实现post方式上传图片文件功能示例