月度归档 2016年7月18日

通过清心醉

网站进阶-什么叫并发-什么叫访问量

首先一张图,来看看常规的WEB请求:

bingfa

 

以上规则,为每一个用户的请求,包括建立HTTP协议连接;

何为并发?并发其实就是短暂时间内进行访问,比如1-3秒内同时2000个用户执行以上操作,就是2000个实际并发;
何为访问量?访问量为非同一短暂时间内进行服务器的访问,比如有100个用户是17:00访问,又有100个用户是17:01分访问,实际2分钟内就有200个访问量,但实际并发量只有100;
注:高并发如果为真实用户访问即会消耗系统、带宽等资源;如果非法访问,就是所谓的DDOS攻击,即1秒内发起10000+的伪用户进行网站访问,消耗服务器所有资源,导致其他用户打不开,包括服务器宏机!

 

附:

针对高并发,吞吐量来说,大家都知道使用NGINX,因为占用内存资源少,如果是APACHE,会浪费过多的内存资源,基于带宽来说,消费的基本都是同等的!

通过清心醉

开源一个高德地图地理位置获取API

<?php
/***
*
#–地图位置计算类库
$ipanying = new ipanying(); //实例化地图类库

#–构造商家数据坐标集
$data =array(
0 =>array(
‘mid’=>’111’,
‘lng’=>’111.111’,
‘lat’=>’22.22’
),
1 =>array(
‘mid’=>’112’,
‘lng’=>’112.112’,
‘lat’=>’23.23’
)
);

#–数据回调URL,把计算出的用户与商家的实际距离进行AJAX请求该URL
$return_url = ‘http://’.$_SERVER[‘HTTP_HOST’].’/ipanying.php’;
echo $ipanyingmap->getUserDir($data, $return_url, ‘color:red’);
*/
class ipanying{

/***
*
* @param unknown $ipanying #–商家地理位置二维数组
* @param unknown $return_url #–计算出的距离的数据AJAX请求URL
* @param unknown $style #–INPUT样式
* @param string $text #–显示的文字,比如没获取之前可以说获取位置,获取成功之后可以是更新位置等
* @param string $key #–KEY密钥
* @return string #–返回一个JS代码的页面字符串
* 注:在return接收页,lng,lat实际为用户的坐标数据,type=’dir’,
* 获取数据之后,销毁POST的lng,lat,type
*/
function getUserDir($ipanying,$return_url,$style,$text=’获取位置’,$key=’您的KEY值’){
$html='<script type=”text/javascript” src=”ipanying.js”></script>’;
$html.=”
<script type=’text/javascript’ src=’http://webapi.amap.com/maps?v=1.3&key=”.$key.”‘></script>
<script>
var usermap, geolocation;
var ipanyingmap_url='”.$return_url.”‘;
function getAddress(){
usermap = new AMap.Map(‘container-ipanying’, {
resizeEnable: true
});

usermap.plugin(‘AMap.Geolocation’, function() {
var geolocation = new AMap.Geolocation({
enableHighAccuracy: true,
timeout: 10000,
buttonOffset: new AMap.Pixel(10, 20),
zoomToAccuracy: true,
buttonPosition:’RB’
});
usermap.addControl(geolocation);
geolocation.getCurrentPosition();
AMap.event.addListener(geolocation, ‘complete’, onComplete);
});
}
//解析定位结果
function onComplete(data) {
var lng = data.position.getLng();
var lat = data.position.getLat();
if(lng==null || lng==undefined || lat==null || lat==undefined){
alert(‘用户坐标为空,无法计算’);
return false;
}
var ipanying = new Array();
“;

#—循环输出商家数据到JS
for($k=0;$k<count($ipanying);$k++){
$html.=”ipanying[$k]=new Array();
ipanying[$k][‘mid’]=”.$ipanying[$k][‘mid’].”;
ipanying[$k][‘dir’] = [“.$ipanying[$k][‘lng’].”,”.$ipanying[$k][‘lat’].”];”;
}

$html.=”
shangjiamaps(ipanying,lng,lat);
} //onComplete结束

function shangjiamaps(lnglats,xdir,ydir){ //位置计算方法
var str =’lng=’+xdir+’&lat=’+ydir;
for (var i = 0; i < lnglats.length; i++) {
var marker = new AMap.Marker({
position: lnglats[i],
//map: map
});
if(xdir == ” || xdir == undefined || xdir==null || ydir == ” || ydir == undefined || ydir==null){
var isadd =’nulls’;
} else {
var islnglat = new AMap.LngLat(xdir,ydir);
var cl = islnglat.distance(lnglats[i][‘dir’]);
var isadd = cl.toFixed(0);
}
str +=’&’+lnglats[i][‘mid’]+’=’+isadd;
//alert(‘距离商家ID’+lnglats[i][‘mid’]+’有’+isadd+’米’);
}
qingxinzui_alert(ipanyingmap_url,str,’dir’);
//alert(str);
}
</script>”;
$html.='<input type=”submit” onclick=”getAddress();” value=”‘.$text.'” style=”‘.$style.'” />’;
return $html;
}
}

if(isset($_POST[‘type’]) && $_POST[‘type’]==’dir’){
//处理回调
unset($_POST[‘type’]; //销毁类型参数

$userlng=$_POST[‘lng’]; //提取用户经度
$userlat=$_POST[‘lat’]; //提取用户纬度
//在这里获取的用户经纬度信息自行保留至SESSION或者COOKIE或者SQL

unset($_POST[‘lng’]); //销毁POST经度
unset($_POST[‘lat’]); //销毁POST纬度
$ipanying = $_POST; //数据给予数组
$text = ”;
foreach($ipanying as $key => $value){
$text.=’用户距离商家ID’.$key.’的直线距离=’.$value.’米 <br \>’;
}
}

 

扩展类库下载:高德地图距离计算类库PHP版

请尊重开源,转发请注明出处!