// 队列redis连接操作
public function RedisConnect() {
$queue =
Yii::app()->queue_redis;
$server = $queue->host;
$port = $queue->port;
$timeout = $queue->timeOut;
$redis = new Redis();
$redis->connect($server, $port,
$timeout); // timeout=300
return $redis;
}
/** redis计数控制并发
*
* @param connomains: url数组
*
@param key: redis键名
* @param max: 总运行次数
* @param
ip: ip
* @param c: c当前循环次数
* @param i:
并发控制,允许同时运行多少条
* @return
*/
private function
redisCount(&$connomains,$key,$ip,$max,$c,$i=20){
$RedisConnect =
$this->RedisConnect();
$redis = $RedisConnect->get($key);
echo "redis==".$redis;
if(isset($redis)){
if($redis >= $i){
if(!empty($connomains)){
$this->multi_curl($connomains);
$connomains =
array();
}
sleep(2);
$this->redisCount($connomains,$key,$ip,$max,$c,$i);
}else{
$RedisConnect->incr($key);
}
}
}
//并发多线程访问
private function multi_curl($links){
$mh =
curl_multi_init();
$instances = array();
foreach($links as
$type=>$link){
$instances[$type] =
curl_init($link['url']);
curl_setopt($instances[$type],CURLOPT_RETURNTRANSFER, 1);
curl_setopt($instances[$type],CURLOPT_TIMEOUT, 90);//原先90 2014/11/10
curl_setopt($instances[$type],CURLOPT_POST, 1);
curl_setopt($instances[$type],CURLOPT_POSTFIELDS, $link['data']);
curl_multi_add_handle($mh,$instances[$type]);
}
//
do{$n=curl_multi_exec($mh,$active);}while($active);//$active表示还有多少个连接要执行
do {
$mrc = curl_multi_exec($mh,$active);
//curl_multi_exec运行结果0是成功,-1是有问题
} while ($mrc ==
CURLM_CALL_MULTI_PERFORM); //CURLM_CALL_MULTI_PERFORM常量,值-1
while
($active and $mrc == CURLM_OK) { //CURLM_OK常量,值0
if
(curl_multi_select($mh) != -1) { //curl_multi_select($mh)
判断是否正在执行,未执行0,正在执行1,错误-1
do {
$mrc =
curl_multi_exec($mh, $active); //$active表示还有多少个连接要执行
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
foreach($links as $type=>$link){
$res[$type] =
curl_multi_getcontent($instances[$type]);
curl_close($instances[$type]);
}
return
$res;
} 以上就是并发CURL访问并通过REDIS来控制并发数的内容,更多相关内容请关注PHP中文网(www.php.cn)!
完全公开源代码,并无任何许可限制 特别基于大型电子商务网站的系统开发 Microsoft SQL Server 2000后台数据库,充分应用了存储过程的巨大功效 基于类模块的扩展数据访问能力支持任何类型的大型数据库 加密用户登录信息(cookie) 易于安装的系统和应用功能 100%的asp.net的代码,没有COM,java或者其他的格式 完全基于MS建议的系统安全设计 最佳的应用程序,数据库
0
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号