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

PHP模拟并发请求

高老师8年前 (2017-07-30)PHP3520

原理:使用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调用.net的dll文件,php调用.net dll

php调用.net的dll文件,php调用.net dll

本篇文章不是讲解如何用.net开发自己的dll然后PHP通过com调用。主要记录PHP官方支持的DOTNET 基本语法如下:$obj = new DOTNET("assembly", "classname")a...

php 获取当前执行文件,php 获取当前执行文件,php 获取当前文件

php 获取当前执行文件,php 获取当前执行文件,php 获取当前文件

php官方的超全局变量$_SERVER['PHP_SELF']也能直接获取,只不过如果url参数太多也会获取。下面提供一个方法获取/*  * 获取当前PHP文件名称  */ if (!function_exists('phpself&#...

【一】PHP多进程学习-简单创建父子进程.理解父子进程运行流程

【一】PHP多进程学习-简单创建父子进程.理解父子进程运行流程

(1).学习的目标:学会创建父子进程,并且能够区分当前进程是父还是子;了解父进程执行过程,子进程执行过程;能够用多进程执行任务(2).相关函数学习:    (2.1)pcntl_fork()执行时:       &nbs...

【二】PHP多进程学习-进程信号管理

【二】PHP多进程学习-进程信号管理

(1).学习目标:    了解常见信号类型(百度PHP支持的信号类型),(2).相关函数学习:    (2.1).pcntl_signal函数用于设置一个信号管理器接收进程信号,参数1:信号类型,参数2:回调函数,用于在接收到参数1类型的信...

tp orm事务提交未执行的教训和总结

tp orm事务提交未执行的教训和总结

最近在项目中处理一个关于商品数据重复需要删除多余的商品记录,但是删除一条商品必然要把关联的其他表商品的id和其他商品信息更换为正确的,删除一个商品记录,同时要去修改100多张表的关联商品数据,在项目中引用了tp orm 1.2版本,由于项目是php5.6版本,没法使用最新orm,在代码中每处理1个商...

php通过event扩展创建定时器,php毫秒级定时器

php通过event扩展创建定时器,php毫秒级定时器

PHP简单定时器可以通过pcntl_signal创建闹钟信号来实现。但是缺点很明显,性能一般,要自己实现守护进程,不支持毫秒级定时器,单进程不支持多个闹钟信号,不能跨平台运行event扩展支持的事件多,性能高。<?php //创建event配置.[空配置] $eventConfig ...