每个php文件的执行是单线程的,但是php本身也可以用一些别的技术实现多线程并发改革开放40周年感悟比如用php-fpm进程,这里用curl模拟多线程发送请求。php的curl多线程是通过不断调用curl_multi_exec来获取内容,这里举一个demo来模拟一次curl多线程并发操作。
//设置缓冲为0(也可以去php.ini设置)ini_t('output_buffering', 0);//打开输出缓冲区ob_start();//设置一个空数组$curl_arr=[];//这里模拟20次请求for($i=0;$i<20;$i++){ //开启curl连接 $curl_arr[$i]=curl_init("http://xxxx/test.php"); //curlopt_returntransfer 设置为1表示稍后执行的curl_exec函数的返回是url的返回字符串,而不是把返回字符串定向到标准输出并返回true; curl_topt($curl_arr[$i],curlopt_returntransfer,1);}//创建批处理curl句柄$mh = curl_multi_init();foreach($curl_arr as $k => $ch){ //curl句柄入栈增加 curl_multi_add_handle($mh,$ch);}$active = null;while(count($curl_arr)>0){ //发起curl_multi请求 @curl_multi_exec($mh,$active); foreach($curl_arr as $k => $ch){ //获取句柄的返回值 if($result[$k]= curl_multi_getcontent($ch)){ //输编程是干什么的出结果 echo "$result[$k]\n"; 女生的英文名 ob_flush(); //把被释放的数据发送到浏览器 flush(); //关闭该句柄 curl_multi_remove_handle($mh,$ch); unt($curl_arr[$k]); } }}//关闭ouput_buffering机制ob_end_flush();//关闭"curl_mulit"句柄curl_multi_clo($mh);
我再服务器上建立一起请求的php页面命名为test.php,内容如下
1 sleep(10);2 echo 'ccess';exit;
表示等待体育类大学排名十秒后数生活中的平移据下面语句。
然后我在命令行执行该程序结果如下:
上面代码中通过循环$curl_arr数组来调用curl_multi_getcontent来查询是否有数据。有数据就输出并删除元素,直到$curl_arr数组元素个数为0。
该模拟多线程实现是通过使用curl的curl_multi系列函数能实现此功能的。至于该系列函数使用介绍,百度一搜一大把。这里就不做说明了。
以上所述是www.887551.com给大家介绍的php使用curl模拟多线程发送请求详解整合,希望对大家有所帮助
本文发布于:2023-04-06 14:56:13,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/8fadd000d5136ff0d6b5a7bedf5bb156.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:浅谈php使用curl模拟多线程发送请求.doc
本文 PDF 下载地址:浅谈php使用curl模拟多线程发送请求.pdf
留言与评论(共有 0 条评论) |