Skip to content

Commit 0468bd2

Browse files
committed
Merge pull request #2 from quickhack/master
调整文档用词和格式;增加代码染色
2 parents 3969cdf + 0265acc commit 0468bd2

File tree

1 file changed

+134
-124
lines changed

1 file changed

+134
-124
lines changed

README.md

Lines changed: 134 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,69 @@
1-
该项目是手机微博研发团队和手机微博技术保障部共同努力的成果。 <br>
2-
在此特别感谢: <br>
3-
张杰 微博:[@木泽水](http://weibo.com/klans)<br>
4-
王春生 微博:[@平凡的香草](http://weibo.com/chunshengster)<br>
5-
胡波 微博:[@胡波_](http://weibo.com/coolbor) <br>
6-
韩超 微博:[@超朝炒觘](http://weibo.com/weibochao) <br>
7-
赵星宇 微博:[@淘淘不逃008 ](http://weibo.com/5251978872) <br>
8-
聂钰 微博:[@古夜](http://weibo.com/206541012) <br>
9-
冯磊 微博:[@冯磊424](http://weibo.com/myfenglei) <br>
1+
该项目是手机微博研发团队和手机微博技术保障部共同努力的成果。
2+
3+
在此特别感谢:
4+
5+
- 张杰 微博:[@木泽水](http://weibo.com/klans)
6+
- 王春生 微博:[@平凡的香草](http://weibo.com/chunshengster)
7+
- 胡波 微博:[@胡波_](http://weibo.com/coolbor)
8+
- 韩超 微博:[@超朝炒觘](http://weibo.com/weibochao)
9+
- 赵星宇 微博:[@淘淘不逃008 ](http://weibo.com/5251978872)
10+
- 聂钰 微博:[@古夜](http://weibo.com/206541012)
11+
- 冯磊 微博:[@冯磊424](http://weibo.com/myfenglei)
1012

1113
等同学的支持。
14+
1215
感谢大家提出的宝贵意见,感谢大家为该项目付出的努力!
1316

14-
项目中有任何问题欢迎大家来吐槽,一起完善、一起提高、一起使用!<br>
15-
email:xingyu10@staff.weibo.com fenglei1@staff.sina.com.cn <br>
17+
项目中有任何问题欢迎大家来吐槽,一起完善、一起提高、一起使用!
18+
email: xingyu10@staff.weibo.com fenglei1@staff.sina.com.cn
1619

17-
<br>
20+
接入说明
21+
-----------------------------------
1822

23+
由于该工程需要用户自定义部分配置文件,所以建议以源码方式使用。(同时也支持项目中设定`Lib`库的参数)
1924

25+
`Lib`库目前还没有打包成`jar`文件, 大家测试使用的话可以直接将工程包含到自己的工程内即可。
2026

21-
接入说明:
22-
-----------------------------------
23-
由于该工程需要用户自定义部分配置文件,所以建议以源码方式使用。(同时也支持项目中设定lib库的参数)
24-
lib库目前还没有打包成 jar 文件, 大家测试使用的话可以直接将工程包含到自己的工程内即可。
25-
apk文件夹下内有打包好的对httpDNS库进行测试的程序。 该测试程序模拟了用户使用的场景,并且记录了相关统计数据。以及Lib库的时时的状态信息。
27+
`apk`文件夹下内有打包好的对`httpDNS`库进行测试的程序。
28+
该测试程序模拟了用户使用的场景,并且记录了相关统计数据,以及`Lib`库的时时的状态信息。
2629

30+
### `AndroidManifest.xml`文件中需要配置
2731

28-
29-
### 在AndroidManifest.xml文件中需要配置
30-
31-
<!-- 主要注册一个广播 监听网络发生变化,本地更新dns解析记录-->
32-
<receiver
33-
android:name="com.sina.util.networktype.NetworkStateReceiver"
34-
android:label="NetworkConnection" >
35-
<intent-filter>
36-
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
37-
<action android:name="android.intent.action.USER_PRESENT" />
38-
</intent-filter>
39-
</receiver>
40-
41-
<!-- 需要配置的权限 -->
42-
<uses-permission android:name="android.permission.INTERNET" />
43-
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
44-
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
45-
<uses-permission android:name="android.permission.WAKE_LOCK" />
46-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
47-
48-
### 在使用 http dns前 需要初始化一次
32+
```xml
33+
<!-- 主要注册一个广播 监听网络发生变化,本地更新dns解析记录-->
34+
<receiver
35+
android:name="com.sina.util.networktype.NetworkStateReceiver"
36+
android:label="NetworkConnection" >
37+
<intent-filter>
38+
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
39+
<action android:name="android.intent.action.USER_PRESENT" />
40+
</intent-filter>
41+
</receiver>
42+
43+
<!-- 需要配置的权限 -->
44+
<uses-permission android:name="android.permission.INTERNET" />
45+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
46+
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
47+
<uses-permission android:name="android.permission.WAKE_LOCK" />
48+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
49+
```
50+
51+
### 使用`http dns`前初始化
52+
53+
```java
4954
DNSCache.Init(this);
55+
```
5056

57+
### 直接调用该方法获取`A`记录对象
5158

52-
### 直接调用该方法获取 A记录对象
53-
DomainInfo[] infoList = DNSCache.getInstance().getDomainServerIp( "http://api.weibo.cn/index.html" ) ;
59+
```java
60+
DomainInfo[] infoList = DNSCache.getInstance().getDomainServerIp( "http://api.weibo.cn/index.html") ;
5461

5562
//DomainInfo 返回有可能为null,如果为空则使用域名直接请求数据吧~ 因为在http server 故障的时候会出现这个问题。
5663

57-
if( infoList != null ) {
64+
if( infoList != null ) {
5865
//A记录可能会返回多个, 没有特殊需求直接使用第一个即可。 这个数组是经过排序的。
59-
DomainInfo domainModel = infoList[0] ;
66+
DomainInfo domainModel = infoList[0] ;
6067

6168
//这里是 android 请求网络。 只需要在http头里添加一个数据即可。 省下的请求数据和原先一样。
6269
HttpGet getMethod = new HttpGet( domainModel.url );
@@ -66,87 +73,88 @@ DomainInfo[] infoList = DNSCache.getInstance().getDomainServerIp( "http://api.we
6673
HttpResponse response = httpClient.execute(getMethod);
6774
String res = EntityUtils.toString(response.getEntity(), "utf-8") ;
6875
Log.d("DINFO", res) ;
69-
70-
//在请求倒数据后,请配合将一部分信息传递给我。 lib库里面会对这个服务器进行评分计算,lib库永远会优先给你最快,最稳定的服务器地址。
76+
77+
//在请求倒数据后,请配合将一部分信息传递给我。 lib库里面会对这个服务器进行评分计算,lib库永远会优先给你最快,最稳定的服务器地址。
7178
domainModel.code = String.valueOf( response.getStatusLine().getStatusCode() );
7279
domainModel.data = res ;
7380
domainModel.startTime = String.valueOf(startDomainRequests) ;
7481
DNSCache.getInstance().setDomainServerIpInfo( domainModel );
75-
}
76-
77-
78-
79-
82+
}
83+
```
8084

8185
### 更多配置
82-
你可以创建一个 com.sina.util.dnscache.DNSCacheConfig.Data 对象分别设置下面属性。 <br>
83-
然后调用 DNSCacheConfig.saveLocalConfigAndSync 方法传入 设定好的 配置选项。
84-
85-
86-
/**
87-
* 是否启用自己家的HTTP_DNS服务器 默认不启用 | 1启用 0不启用
88-
*/
89-
public String IS_MY_HTTP_SERVER = null;
90-
/**
91-
* 自己家HTTP_DNS服务API地址 使用时直接在字符串后面拼接domain地址 |
92-
* 示例(http://xxx.xxx.xxx.xxx/dns?domain=)+ domain
93-
*/
94-
public String HTTPDNS_SERVER_API = null;
95-
/**
96-
* 是否启用dnspod服务器 默认不启用 | 1启用 0不启用
97-
*/
98-
public String IS_DNSPOD_SERVER = null;
99-
/**
100-
* DNSPOD HTTP_DNS 服务器API地址 | 默认(http://119.29.29.29/d?ttl=1&dn=)
101-
*/
102-
public String DNSPOD_SERVER_API = null;
103-
/**
104-
* DNSPOD 企业级ID配置选项
105-
*/
106-
public String DNSPOD_ID = null;
107-
/**
108-
* DNSPOD 企业级KEY配置选项
109-
*/
110-
public String DNSPOD_KEY = null;
111-
/**
112-
* 是否开启 本地排序插件算法 默认开启 | 1开启 0不开启
113-
*/
114-
public String IS_SORT = null;
115-
/**
116-
* 速度插件 比重分配值:默认40%
117-
*/
118-
public String SPEEDTEST_PLUGIN_NUM = null;
119-
/**
120-
* 服务器推荐优先级插件 比重分配:默认30% (需要自家HTTP_DNS服务器支持)
121-
*/
122-
public String PRIORITY_PLUGIN_NUM = null;
123-
/**
124-
* 历史成功次数计算插件 比重分配:默认10%
125-
*/
126-
public String SUCCESSNUM_PLUGIN_NUM = null;
127-
/**
128-
* 历史错误次数计算插件 比重分配:默认10%
129-
*/
130-
public String ERRNUM_PLUGIN_NUM = null;
131-
/**
132-
* 最后一次成功时间计算插件 比重分配:默认10%
133-
*/
134-
public String SUCCESSTIME_PLUGIN_NUM = null;
135-
/**
136-
* domain对应的测速文件,如果需要对服务器进行测速请给domain设置一个可以下载的资源文件来计算服务器速度
137-
*/
138-
public ArrayList<String> SPEEDPATH_LIST = new ArrayList<String>();
13986

87+
你可以创建一个`com.sina.util.dnscache.DNSCacheConfig.Data`对象分别设置下面属性。
88+
89+
然后调用`DNSCacheConfig.saveLocalConfigAndSync`方法传入设定好的配置选项。
90+
91+
```java
92+
/**
93+
* 是否启用自己家的HTTP_DNS服务器 默认不启用 | 1启用 0不启用
94+
*/
95+
public String IS_MY_HTTP_SERVER = null;
96+
/**
97+
* 自己家HTTP_DNS服务API地址 使用时直接在字符串后面拼接domain地址 |
98+
* 示例(http://xxx.xxx.xxx.xxx/dns?domain=)+ domain
99+
*/
100+
public String HTTPDNS_SERVER_API = null;
101+
/**
102+
* 是否启用dnspod服务器 默认不启用 | 1启用 0不启用
103+
*/
104+
public String IS_DNSPOD_SERVER = null;
105+
/**
106+
* DNSPOD HTTP_DNS 服务器API地址 | 默认(http://119.29.29.29/d?ttl=1&dn=)
107+
*/
108+
public String DNSPOD_SERVER_API = null;
109+
/**
110+
* DNSPOD 企业级ID配置选项
111+
*/
112+
public String DNSPOD_ID = null;
113+
/**
114+
* DNSPOD 企业级KEY配置选项
115+
*/
116+
public String DNSPOD_KEY = null;
117+
/**
118+
* 是否开启 本地排序插件算法 默认开启 | 1开启 0不开启
119+
*/
120+
public String IS_SORT = null;
121+
/**
122+
* 速度插件 比重分配值:默认40%
123+
*/
124+
public String SPEEDTEST_PLUGIN_NUM = null;
125+
/**
126+
* 服务器推荐优先级插件 比重分配:默认30% (需要自家HTTP_DNS服务器支持)
127+
*/
128+
public String PRIORITY_PLUGIN_NUM = null;
129+
/**
130+
* 历史成功次数计算插件 比重分配:默认10%
131+
*/
132+
public String SUCCESSNUM_PLUGIN_NUM = null;
133+
/**
134+
* 历史错误次数计算插件 比重分配:默认10%
135+
*/
136+
public String ERRNUM_PLUGIN_NUM = null;
137+
/**
138+
* 最后一次成功时间计算插件 比重分配:默认10%
139+
*/
140+
public String SUCCESSTIME_PLUGIN_NUM = null;
141+
/**
142+
* domain对应的测速文件,如果需要对服务器进行测速请给domain设置一个可以下载的资源文件来计算服务器速度
143+
*/
144+
public ArrayList<String> SPEEDPATH_LIST = new ArrayList<String>();
145+
```
140146

141147
### 动态更新参数
142-
DNSCacheConfig 类下的 ConfigText_API 字段可以配置成自动更新配置参数的接口。 该接口返回json数据类型 具体数据格式详见DNSCacheConfig.Data toJson()方法。
143148

149+
`DNSCacheConfig`类下的`ConfigText_API`字段可以配置成自动更新配置参数的接口。该接口返回`json`数据类型 具体数据格式详见`DNSCacheConfig.Data toJson()`方法。
144150

145151
### 自己家HttpDNS服务接入
146-
首先开启 DNSCacheConfig.Data.IS_MY_HTTP_SERVER = 1 ; 然后设定 DNSCacheConfig.Data.HTTPDNS_SERVER_API 接口地址
147-
示例(http://XXX.XXX.XXX.XXX/dns?domain=)+ domain
148152

149-
该接口返回格式(当然你也可以自定义格式需要重载 com.sina.util.dnscache.httpdns.IJsonParser 类即可):
153+
1. 开启`DNSCacheConfig.Data.IS_MY_HTTP_SERVER = 1;`
154+
2. 设定 `DNSCacheConfig.Data.HTTPDNS_SERVER_API`接口地址(示例`http://XXX.XXX.XXX.XXX/dns?domain=`)+ `domain`,该接口返回格式。
155+
(重载`com.sina.util.dnscache.httpdns.IJsonParser`类可以自定义格式)
156+
157+
```javascript
150158
{
151159
"domain": "api.weibo.cn",
152160
"device_ip": "10.209.70.192",
@@ -169,36 +177,38 @@ DNSCacheConfig 类下的 ConfigText_API 字段可以配置成自动更新配置
169177
}
170178
]
171179
}
172-
PS: priority 字段是服务器推荐优先级。 | device_sp 字段是该设备出口运营商。
173-
180+
```
174181

182+
PS: `priority`字段是服务器推荐优先级。`device_sp`字段是该设备出口运营商。
175183

176184
HttpDns是什么?
177185
-----------------------------------
178186

179-
如果你对 httpdns 还不了解他是什么!<br>
180-
你可以阅读:[【鹅厂网事】全局精确流量调度新思路-HttpDNS服务详解](http://mp.weixin.qq.com/s?__biz=MzA3ODgyNzcwMw==&mid=201837080&idx=1&sn=b2a152b84df1c7dbd294ea66037cf262&scene=2&from=timeline&isappinstalled=0&utm_source=tuicool)<br />
181-
<br>
182-
<br>
187+
如果你对 httpdns 还不了解他是什么!
188+
189+
你可以阅读:[【鹅厂网事】全局精确流量调度新思路-HttpDNS服务详解](http://mp.weixin.qq.com/s?__biz=MzA3ODgyNzcwMw==&mid=201837080&idx=1&sn=b2a152b84df1c7dbd294ea66037cf262&scene=2&from=timeline&isappinstalled=0&utm_source=tuicool)
183190

184-
传统DNS解析 和 HTTPDNS解析 本质的区别
191+
传统DNS解析 和 HTTPDNS解析 本质的区别
185192
-----------------------------------
186193
### 传统DNS解析
187-
客户端发送udp数据包到dns服务器,dns服务器返回该域名的相关A记录信息。
194+
195+
客户端发送udp数据包到dns服务器,dns服务器返回该域名的相关A记录信息。
196+
188197
### HTTPDNS解析
189-
客户端发起http请求携带需要查询的域名,通过IP直接访问服务器,该Http服务器接倒请求后返回域名对应的A记录。
190-
<br>
191-
<br>
198+
199+
客户端发起http请求携带需要查询的域名,通过IP直接访问服务器,该Http服务器接倒请求后返回域名对应的A记录。
192200

193201
HttpDns sdk (android版本)
194202
-----------------------------------
203+
195204
### 希望解决的问题:
196-
1.LocalDNS劫持
197-
2.平均访问延迟下降
198-
3.用户连接失败率下降
199205

206+
1. LocalDNS劫持
207+
2. 平均访问延迟下降
208+
3. 用户连接失败率下降
200209

201210
### 目录结构说明:
211+
202212
HttpDns/src/DNSCache --- HttpDns lib库主工程。
203213
HttpDns/src/DNSCacheTest --- HttpDns库测试工程。
204214
HttpDns/doc --- 项目相关的一些文档、流程图、结构图等。

0 commit comments

Comments
 (0)