当前位置:首页 > PHP > 正文内容

PHP模拟并发请求

高老师9年前 (2017-07-30)PHP3706

原理:使用curl_init()创建多个请求实例,再使用curl_multi_init()批量执行创建的多个请求实例。

文件1:curl.php

<?php 

$threads=500;//并发请求次数
$url='http://blog.cn/index.php?';//请求的url

//创建一个未定义的curl句柄数组
$ch=array();

//创建批处理cURL的句柄
$mh = curl_multi_init();


//创建并发请求次数个url用于后面给curl分配
for ($i=0; $i <$threads ; $i++) {
		//有多少请求,创建多少curl会话
		$ch[$i]=curl_init();
		curl_setopt($ch[$i], CURLOPT_URL, $url.rand(1,1000));//随机参数,避免缓存
		curl_setopt($ch[$i], CURLOPT_HEADER, 0);		
		//创建的会话分配给curl批处理句柄
		curl_multi_add_handle($mh,$ch[$i]);
}


$running=null;
//所有的curl会话分配给$mh这个curl批量处理句柄来执行
do {
    usleep(10000);
    curl_multi_exec($mh,$running);
} while ($running > 0);


//关闭已经创建的会话句柄
for ($i=0; $i <$threads ; $i++) { 
	curl_multi_remove_handle($mh, $ch[$i]);
}

//关闭批处理句柄
curl_multi_close($mh);

?>

文件2:index.php

<?php 
  file_put_contents('1.txt',date('Y-m-d H:i:s',time())."\r\n",FILE_APPEND );
?>

文件3:1.txt

2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:06
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07
2017-07-30 22:30:07

基本同时请求的还是比较多的,受带宽和CPU影响,多线程的访问,并不是一定会同时,线程是否立即执行决定权是CPU

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/37.html

分享给朋友:

“PHP模拟并发请求” 的相关文章

PHP中Session文件过多的解决方法

PHP中Session文件过多的解决方法

PHP的session文件夹默认保存在同一个文件,随着访客的增多,访问的速度会非常慢,例如部分管理系统后台每天登陆1000次,1个月就创建了30000个session文件,一年后是多少?假设这个系统的用户是上万人呢?方法1:每个网站使用自己的session文件夹,代码如下:<?php $pat...

 php文件锁解决高并发

php文件锁解决高并发

前面的文章对于高并发下单商品导致商品库存为负值的问题请先阅读再阅读本篇文章一定对您有帮助,建议亲手测试较好。加上文件锁后的下单处理代码:【一】.阻塞模式:(如果其他进程已经加锁文件,当前进程会一直等其他进程解锁文件后继续执行)<?php //连接数据库 $con=mysqli_connect(...

php arrayaccess的应用场景:配置管理器

php arrayaccess的应用场景:配置管理器

上篇文章已经讲解arrayacces的原理,现在来讲解下arrayaccess的实际应用。一个大型的互联网项目中必然会存在各种配置信息,例如多种数据库信息:mysql,tidb,mongodb,redis,某个业务模块单独的配置信息如比例,额度等等,那么该如何治理配置信息?PHP项目中大部分的框架都...

php json_encode 使用注意

php json_encode 使用注意

参数中包含gb2312的字符串,返回结果是false或者null(不同PHP版本具有差异性)代码:<?php $dbms = 'mysql'; $host = '192.168.8.8'; $dbName =&n...

php  while  true  cpu占用100%

php while true cpu占用100%

在编写多进程的实例中我在每个进程中使用如下代码://调用等待信号的处理器 while (true) {     pcntl_signal_dispatch(); }开启5个进程,cpu直接100%修正之后的代码://调用等待信号的处理器 while&...

php限制方法返回值类型

php限制方法返回值类型

php7新增的特性(1).强制限制只能返回一种类型<?php class task { } //must return an integer function add(): int {    &nb...