前两天有人问我.有没有测试与一个服务器之间的 连接状态的函数....
emmm,这个么当然没有.
众所周知.测试与服务器之间的链接状态,通常都是使用 ping命令,所以,我们测试与目标网络的连接状态,理所当然的使用ping来实现.ping个十次八次的然后拿到他的 最大值/最小值/平均值/平均偏差,通过这些数值去判断与服务器之间的连接状态是否稳定.
例如:
ping -c 10 www.baidu.com
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121: icmp_seq=1 ttl=53 time=6.82 ms
64 bytes from 61.135.169.121: icmp_seq=2 ttl=53 time=6.23 ms
64 bytes from 61.135.169.121: icmp_seq=3 ttl=53 time=7.28 ms
64 bytes from 61.135.169.121: icmp_seq=4 ttl=53 time=103 ms
64 bytes from 61.135.169.121: icmp_seq=5 ttl=53 time=96.0 ms
64 bytes from 61.135.169.121: icmp_seq=6 ttl=53 time=11.1 ms
64 bytes from 61.135.169.121: icmp_seq=7 ttl=53 time=11.1 ms
64 bytes from 61.135.169.121: icmp_seq=8 ttl=53 time=7.74 ms
64 bytes from 61.135.169.121: icmp_seq=9 ttl=53 time=10.9 ms
64 bytes from 61.135.169.121: icmp_seq=10 ttl=53 time=12.0 ms
--- www.a.shifen.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9014ms
rtt min/avg/max/mdev = 6.236/27.247/103.125/36.251 ms
那我们ping10次百度,然后查看返回的结果 第16行 rtt开头的那部分
min:最小值
avg:平均值
max:最大值
mdev:平均偏差值
一般看mdev这个值,这个值越小,说明你与目标服务器的连接状态越稳定,如果越大,则说明越不稳定.
至于取值...就看你自己习惯使用哪种方式取了.是使用shell取值还是使用js来取值.这种使用shell执行的命令,我还是比较喜欢使用shell的方式去取值,那一起来看最终的实现:
/**
* 测试与目标网络的ping值,返回最小值 最大值 平均值 平均偏差值
* @param {string} target 目标网络的域名或者IP
* @param {int} count 测试次数,次数越大,测试值越准确,但时间会越长
*/
function pingTest(target, count) {
var res = shell("ping -c "+ count +" "+ target +" |grep 'rtt' |awk '{print $4}'").result;
res = res.replace("\\n", "");
var resArry = res.split("/");
return {
min : resArry[0], //最小值
max : resArry[2], //最大值
avg : resArry[1], //平均值
mdev: resArry[3] //与平均值的偏差,值越大,说明网络越不稳定
};
}
var t = pingTest("www.baidu.com", 10);
console.log(t.mdev);
附:获取单次ping的time值
var res = shell("ping -c 1 www.baidu.com |awk '{print $7}' |grep -o '[0-9].*'");
console.log(res);
全部0条评论
快来发表一下你的评论吧 !