在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:CNSRE/HTTPDNSLib开源软件地址:https://github.com/CNSRE/HTTPDNSLib开源编程语言:Java 100.0%开源软件介绍:该项目是手机微博研发团队和手机微博技术保障部共同努力的成果。 在此特别感谢: 等同学的支持。 感谢大家提出的宝贵意见,感谢大家为该项目付出的努力! 项目中有任何问题欢迎大家来吐槽,一起完善、一起提高、一起使用! 接入说明由于该工程需要用户自定义部分配置文件,所以建议以源码方式使用。(同时也支持项目中设定
###以下配置请按照顺序进行: 1.配置清单文件 - AndroidManifest.xml <!-- 权限信息 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 2.初始化调用 - 【建议放在Application中处理】 DNSCache.Init(context); 3.预加载域名解析(可选) - 【建议放在Application中处理】 可提前预加载需要解析的域名,并将解析数据缓存到内存中。 DNSCache.getInstance().preLoadDomains(new String[]{"api.camera.weibo.com","domain2","domain3"}); 4.开始使用 直接调用该方法获取 A记录对象 DomainInfo[] infoList = DNSCache.getInstance().getDomainServerIp( "http://api.camera.weibo.com/index.html" ) ;
//DomainInfo 返回有可能为null,如果为空则使用域名直接请求数据吧~ 因为在http server 故障的时候会出现这个问题。
if( infoList != null ) {
//A记录可能会返回多个, 没有特殊需求直接使用第一个即可。 这个数组是经过排序的。
DomainInfo domainModel = infoList[0] ;
//这里是 android 请求网络。 只需要在http头里添加一个数据即可。 省下的请求数据和原先一样。
HttpGet getMethod = new HttpGet( domainModel.url );
getMethod.setHeader("host", domainModel.host);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(getMethod);
} 更多配置你可以创建一个 然后调用 /**
* 是否启用udpdns服务器 默认不启用 | 1启用 0不启用
*/
public String IS_UDPDNS_SERVER = "";
/**
* udp dnsserver的地址,如8.8.8.8
*/
public String UDPDNS_SERVER_API = "";
/**
* 日志采样率。如设为50,则为50次数据采样一次
*/
public String HTTPDNS_LOG_SAMPLE_RATE = "";
/**
* lib库开关,“1”启用,“0”不启用。默认启用
*/
public String HTTPDNS_SWITCH = "";
/**
* 测速间隔时间
*/
public String SCHEDULE_SPEED_INTERVAL = "";
/**
* timer轮询器的间隔时间
*/
public String SCHEDULE_TIMER_INTERVAL = "";
/**
* ip数据过期延迟差值
*/
public String IP_OVERDUE_DELAY = "";
/**
* 是否启用自己家的HTTP_DNS服务器 默认不启用 | 1启用 0不启用
*/
public String IS_MY_HTTP_SERVER = null;
/**
* 自己家HTTP_DNS服务API地址 使用时直接在字符串后面拼接domain地址 |
* 示例(http://202.108.7.153/dns?domain=)+ domain
*/
public ArrayList<String> HTTPDNS_SERVER_API = new ArrayList<String>();
/**
* 是否启用dnspod服务器 默认不启用 | 1启用 0不启用
*/
public String IS_DNSPOD_SERVER = null;
/**
* DNSPOD HTTP_DNS 服务器API地址 | 默认(http://119.29.29.29/d?ttl=1&dn=)
*/
public String DNSPOD_SERVER_API = null;
/**
* DNSPOD 企业级ID配置选项
*/
public String DNSPOD_ID = null;
/**
* DNSPOD 企业级KEY配置选项
*/
public String DNSPOD_KEY = null;
/**
* 是否开启 本地排序插件算法 默认开启 | 1开启 0不开启
*/
public String IS_SORT = null;
/**
* 速度插件 比重分配值:默认40%
*/
public String SPEEDTEST_PLUGIN_NUM = null;
/**
* 服务器推荐优先级插件 比重分配:默认30% (需要自家HTTP_DNS服务器支持)
*/
public String PRIORITY_PLUGIN_NUM = null;
/**
* 历史成功次数计算插件 比重分配:默认10%
*/
public String SUCCESSNUM_PLUGIN_NUM = null;
/**
* 历史错误次数计算插件 比重分配:默认10%
*/
public String ERRNUM_PLUGIN_NUM = null;
/**
* 最后一次成功时间计算插件 比重分配:默认10%
*/
public String SUCCESSTIME_PLUGIN_NUM = null; 动态更新参数
自己家HttpDNS服务接入
{
"domain": "api.weibo.cn",
"device_ip": "10.209.70.192",
"device_sp": "0",
"dns": [
{
"priority": "0",
"ip": "123.125.105.231",
"ttl": "60"
},
{
"priority": "0",
"ip": "123.125.105.246",
"ttl": "60"
},
{
"priority": "0",
"ip": "202.108.7.133",
"ttl": "60"
}
]
} PS: HttpDns是什么?如果你对 httpdns 还不了解他是什么! 你可以阅读:【鹅厂网事】全局精确流量调度新思路-HttpDNS服务详解 传统DNS解析 和 HTTPDNS解析 本质的区别传统DNS解析客户端发送udp数据包到dns服务器,dns服务器返回该域名的相关A记录信息。 HTTPDNS解析客户端发起http请求携带需要查询的域名,通过IP直接访问服务器,该Http服务器接倒请求后返回域名对应的A记录。 HttpDns sdk (android版本)希望解决的问题:
目录结构说明:
HttpDns 交互流程HttpDns Lib库交互流程查询模块
数据缓存模块
评估模块
评估算法插件
打分比重权值分配
目前权重分配完全基于主观认识,后期会根据建立的相应基线进行权重分配调整。
PS:给出一副算法计算分数时的细节图,有兴趣的朋友可以一起探讨研究。 ![image](https://github.com/SinaMSRE/HTTPDNSLib/raw/master/doc/%E7%AE%97%E6%B3%95%E6%8F%92%E4%BB%B6%E8%AE%A1%E7%AE%97%E5%9B%BE.png) HttpDns Test (android版本)测试工程主要最初为了模拟用户使用APP发出的网络请求,进行数据记录和对比。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论