-
Notifications
You must be signed in to change notification settings - Fork 246
NetworkDetector
xinbaicheng edited this page Mar 20, 2017
·
3 revisions
因Android系统的限制,Android端的网络探测只支持Tracker模式,只支持Tracker模式下的PING方式
- Ping方式:相当于执行ping命令
- 功能:检查端到端的连通性,查看对端的响应时间(包括最短,最长,平均)及丢包率
- 优缺点:探测过程快,结果简明易懂,但是无法知道链路上各节点状况
- 适用场景:在不关心链路上各节点信息,只希望判断对端可用性的情况下推荐该方式
- v1.7.4及以上版本
- 所有功能均由类KSYNetworkDetector实现
Tracker模式提供了过配置类KSYNetworkTrackerConfig,有相应的setter
与getter
下面以setter
为例,展示Tracker模式下的可配置选项
方法名 | 含义 |
---|---|
setTimeout | 设置超时阈值,单位:秒 |
setMaxTimeToLiveCount | 设置TTL阈值 |
setDetectCount | 设置探测次数 |
Tracker模式提供了类KSYTrackerRouterInfo记录某个节点的信息
下面将介绍某个节点可获取的信息
方法名 | 返回值 | 含义 |
---|---|---|
getRouterIP | ArrayList | 获取节点IP,探测报文的转发路径出现变化,可能有多个IP的情况 |
getMaxDelay | float | 获取网络探测过程中延迟的最大值 |
getMinDelay | float | 获取网络探测过程中延迟的最小值 |
getAverageDelay | float | 获取网络探测过程中延迟的平均值 |
getDelayAverageDeviation | float | 获取延迟的平均偏差 |
getPacketLossRate | float | 获取丢包率 |
- 完成一次探测时发送一次通知
- 监听到此消息后可通过KSYTrackerRouterInfo获取已完成的统计结果
- 完成所有探测通知时发送此消息
- 监听到此消息后可通过routerInfo获取全部统计结果
- 获取到探测结果后需要调用stop方法结束本次探测
- 探测过程中出现错误时发送此消息
- 监听到此消息后,应调用stop方法结束探测
// 网络探测信息监听器
private KSYNetworkDetector.OnNetworkDetectionEventListener mListener = new KSYNetworkDetector.OnNetworkDetectionEventListener() {
@Override
public void onNetworkDetectInfo(int what, int extra, double value) {
switch (what) {
case KSYNetworkDetector.KSY_NETWORK_DETECTION_EVENT_ONCE_DONE:
// 每做完一次PING操作会有此回调,告知这是第几次网络探测,当次探测耗时,单位为毫秒
Log.d(TAG, "Current Detect Count:"+extra+", time cost:"+value+" ms");
break;
case KSYNetworkDetector.KSY_NETWORK_DETECTION_EVENT_FINISH:
ArrayList<KSYTrackerRouterInfo> outcomes = KSYNetworkDetector.getInstance().getTrackerDetectResult();
// 处理网络探测结果
break;
case KSYNetworkDetector.KSY_NETWORK_DETECTION_EVENT_ERROR:
// 网络探测出错,停止
KSYNetworkDetector.getInstance().stop();
break;
}
}
};
// 设置监听器
KSYNetworkDetector.getInstance().setOnNetworkDetectionEventListener(mListener);
// 创建Tracker网络探测器,探测方式只能为PING方式
int ret = KSYNetworkDetector.getInstance().open(KSYNetworkDetector.KSY_NETWORK_DETECTOR_TYPE_TRACKER);
if (ret < 0)
return;
// 获取当前网络探测配置,此步骤不是必须
KSYNetworkTrackerConfig currentConfig = KSYNetworkDetector.getInstance().getTrackerConfig();
currentConfig.setTimeout(10);
// ...
// 该方法第二个参数可传null,表示使用默认配置
KSYNetworkDetector.getInstance().start("www.baidu.com", currentConfig);