您的位置:首页 > 编程语言 > PHP开发

PHP 多维数组的排序----服务器负载均衡的应用

2014-08-19 12:25 344 查看
array_multisort 在php 中该函数实现多维数组的排序功能,在呼叫中心或者计费服务器中,或许我们需要实现多台服务器按权重(百分比)的模式进行对语音进行分发,那么该函数将帮助你实现该需求。
实例中core_callback_setting 将会保存可以使用的服务器的配置信息:
id---字段ID,也是服务器的ID标记
,ast_ob_servername ---服务器的名字标识,
,ast_ob_host-----服务器IP地址
,ast_ob_port-----AMI 服务器端口
,ast_ob_user-----AMI 服务器验证用户名
,ast_ob_pwd-------AMI 服务器验证密码
,percent_rate-----服务器权重
,current_threads----服务器当前并发
,max_threads-------服务器最大并发
,last_dispatch_time---最近一次分发到该服务器的时间
,ast_version-------软交换的版本

下面将是具体实现的逻辑函数
//function get cb server
function get_callback_srv()
{
global $conn;
$cb_srv_ary=array();
$srv_tmp_ary1=array();
$srv_tmp_ary2=array();

$sql="SELECT id,ast_ob_servername,ast_ob_host,ast_ob_port,ast_ob_user,ast_ob_pwd,percent_rate,current_threads,max_threads,last_dispatch_time,ast_version FROM core_callback_setting WHERE state AND percent_rate";
#echo $sql,"\n";
$rslt=mysql_query($sql,$conn);
$rcnt=mysql_num_rows($rslt);
if($rcnt>0)
{
if($rcnt ==1)
{
#echo "目前只有一个服务器满足要求.....\n";
$cb_srv_ary=mysql_fetch_assoc($rslt);
}
else
{
for($j=0;$j<$rcnt;$j++)
{
$row=mysql_fetch_assoc($rslt);
$srv_id=$row['id'];
$srv_tmp_ary1[$srv_id]=$row;
$r_rate=round($row['current_threads']/$row['percent_rate'],4);
$srv_tmp_ary2[]=array('srv_id'=> $row['id'],
'last_dispatch_time' => $row['last_dispatch_time'],
'r_rate'=> $r_rate);
}
##获取记录后,对记录进行排序
foreach($srv_tmp_ary2 as $key => $row)
{
$val1[$key]=$row['r_rate'];
$val2[$key]=$row['last_dispatch_time'];
}
##数组排序
array_multisort($val1,SORT_ASC,$val2,SORT_ASC,$srv_tmp_ary2);
#print_r($srv_tmp_ary2);
##获取第一个
#echo ">>>>>>>>>>>>>>>>>>>>>>>>\n";
$srv_id=$srv_tmp_ary2[0]['srv_id'];
#print_r($srv_tmp_ary1[$srv_id]);
$cb_srv_ary=$srv_tmp_ary1[$srv_id];

}

}
else
{
writelog($sql);
}
return $cb_srv_ary;
}


本文出自 “asterisk系统专栏” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: