谈论php使用curl模拟多线程发送请�
每个php文件的执行都是单线程的,但是PHP本身也可以使用一些其他的技术来实现多线程并发,比如php-fpm进程,利用curl来模拟多线程发送请求。在php的curl多线程中,通过不断调用curl_multi_exec来获取内容。这里有一个演示来模拟curl多线程的并发操作。
//将缓冲区设置为0(或转到php.ini进行设置)ini_set('output_buffering ',0);//打开输出缓冲区ob _ start();//设置一个空数组$ curl _ Arr=[];//模拟20个请求($ I=0;$ i20$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 handle添加curl_multi_add_handle($mh,$ ch);} $ active=nullwhile(count($ curl _ Arr)0){//initiate curl _ multi request @ 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睡眠(10);2回声“seccess”;退出;下面的语句表示等待十秒后的数据。然后我在命令行上执行程序,结果如下:
在上面的代码中,通过循环$curl_Arr数组来调用loop _ multi _ getcontent,以查询是否有数据。当有数据时输出并删除元素,直到$curl_Arr数组中的元素数为0。多线程仿真实现可以利用curl的curl_multi系列函数实现这一功能。至于这一系列功能的使用介绍,百度搜了很多。这里就不解释了。
以上是边肖介绍给大家的php,用curl模拟多线程发送请求进行详细讲解和集成,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!
版权声明:谈论php使用curl模拟多线程发送请�是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。