每个PHP文件的执行是单线程的,但是php本身也可以用一些别的技术实现多线程并发比如用php-fpm进程,这里用curl模拟多线程发送请求。php的curl多线程是通过不断调用curl_multi_exec来获取内容,这里举一个demo来模拟一次curl多线程并发操作。

//设置缓冲为0(也可以去php.ini设置)

ini_set('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_setopt($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);

unset($curl_Arr[$k]);

}

}

}

//关闭ouput_buffering机制

ob_end_flush();

//关闭"curl_mulit"句柄

curl_multi_close($mh);

我再服务器上建立一起请求的php页面命名为test.php,内容如下

1 sleep(10);

2 echo 'seccess';exit;

表示等待十秒后数据下面语句。

然后我在命令行执行该程序结果如下:

上面代码中通过循环$curl_Arr数组来调用curl_multi_getcontent来查询是否有数据。有数据就输出并删除元素,直到$curl_Arr数组元素个数为0。

该模拟多线程实现是通过使用curl的curl_multi系列函数能实现此功能的。至于该系列函数使用介绍,百度一搜一大把。这里就不做说明了。

以上所述是小编给大家介绍的php使用curl模拟多线程发送请求详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

php多线程模拟请求,浅谈php使用curl模拟多线程发送请求相关推荐

  1. java 多线程同步_浅谈Java多线程(状态、同步等)

    Java多线程是Java程序员必须掌握的基本的知识点,这块知识点比较复杂,知识点也比较多,今天我们一一来聊下Java多线程,系统的整理下这部分内容. 一.Java中线程创建的三种方式: 1.通过继承T ...

  2. 浅谈一种规避iOS多线程Crash的方案

    一般来说,多线程编程因具有以下几个优点,一直被广泛应用: 资源利用率更好 程序设计在某些情况下更简单 程序响应更快 但是因为多线程而导致的crash问题,也是令程序员非常头疼的一个问题,因为线程调度执 ...

  3. postman导出请求url_Postman使用手册1——导入导出和发送请求查看响应

    导读: 现在的web和移动开发,常常会调用服务器提供restful接口进行数据请求,为了调试,一般会先用工具进行测试,通过测试后才开始在开发中使用.这里介绍一下如何在chrome浏览器利用postma ...

  4. php 模拟post带cookie,php利用curl模拟post登录,传递cookie获取数据

    一般我们会用curl抓取其他网站的数据,不过一些网站会设置成登录后才可以获取数据,这样一来我们就需要利用curl模拟登录保存cookie,并且传递cookie伪装和网站建立通信,获取到数据. curl ...

  5. 浅谈数字舵机与模拟舵机区别

    数字舵机(Digital Servo)和模拟舵机(Analog Servo)在基本的机械结构方面是完全一样的,主要由马达.减速齿轮.控制电路等组成,而数字舵机和模拟舵机的最大区别则体现在控制电路上,数 ...

  6. 浅谈安卓Canvas,模拟心电图的绘制

    哇,这哥们好屌,这文章写的真好,可能很多同学心中曾经有过类似的感觉,其实心动不如行动,撸起袖子,就是干! 说到安卓中绘图,大家可能最先想到的就是canvas和surfaceview,今天咱们先一起看下 ...

  7. php 腾讯短信接口api,浅谈PHP使用腾讯云发送短信

    在开发过程中总会遇到需要发送短信的需求,以下介绍使用腾讯云短信api来发送短信的详细过程. 1.登录腾讯云,在应用列表里创建你的应用,输入你的应用名称,应用简介 2.点击应用,获取应用的SDK App ...

  8. php模拟登录教学视频,php使用curl模拟登录人人(校内)网_PHP教程

    $login_url = 'http://passport.renren.com/PLogin.do'; $post_fields['email'] = 'XXXX'; $post_fields['p ...

  9. 浅谈HTTPS以及Fiddler抓取HTTPS协议

    原文 浅谈HTTPS以及Fiddler抓取HTTPS协议 最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求 ...

最新文章

  1. Django之MVC框架与MTV框架详解
  2. MIT Molecular Biology 笔记5 转录机制
  3. MSSQL WITH (NOLOCK) 脏读
  4. [LevelDB] 写批处理过程详解
  5. linux 脚本 语法错误,从windows拷贝到linux的脚本报错:未找到命令 or 语法错误
  6. Ngnix安装的几种常用方式
  7. 微课|玩转Python轻松过二级:第3章课后习题解答4
  8. cocos2dx动画Animation介绍
  9. 用truffle部署智能合约到以太坊网络(truffle+infura)的简易方法
  10. 再也不用为word 中表达式的上标和下标发愁了
  11. 独角兽影视APP系统源码/双端影视APP源码
  12. MATLAB深度学习网络包 Alexnet / Googlenet / Vgg19
  13. win10系统无法登录ftp服务器失败,Win10系统下ftp连接失败提示“连接已超时”如何解决?...
  14. win10/win7 usb转串口驱动下载
  15. 神经网络简介及简单应用
  16. 解密为何 Golang 能从众多语言中脱颖而出
  17. java的副语言_公共表达中,悄悄影响你的“副语言”
  18. 2DPCA以及增强的双向2DPCA详解
  19. 微信公众号用秀米网插入视频
  20. 一键搜索出Android Studio内所有中文

热门文章

  1. ftp 上传文件夹_命令行连接FTP服务器
  2. 143. 最大异或对
  3. 普元连接mysql_普元EOS 案例 - 还有一行代码的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. xpath中两个冒号_爬虫学习(5)—XPath
  5. C++的一般引用及其数组引用
  6. 沃尔沃挖机计算机故障,沃尔沃挖掘机常见故障及原因总结,用户们可以看看
  7. 2021年河北省高考成绩录取查询结果,2021年河北高考一本录取结果查询和录取通知书发放时间...
  8. C语言的putpiel函数,C语言graphics.h函数介绍
  9. python统计汉字个数是_Python中文词频统计
  10. 考公专业科目计算机,2017国考中国证监会专业科目考试大纲(计算机类)