Skip to content

Commit 80978f3

Browse files
author
YangSen-qn
committed
optimize connect check logic
1 parent 060050e commit 80978f3

File tree

4 files changed

+33
-4
lines changed

4 files changed

+33
-4
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.qiniu.android;
2+
3+
import com.qiniu.android.http.connectCheck.ConnectChecker;
4+
5+
public class ConnectCheckTest extends BaseTest {
6+
7+
public void testCheck() {
8+
9+
int maxCount = 1000;
10+
int successCount = 0;
11+
for (int i = 0; i < maxCount; i++) {
12+
if (ConnectChecker.check()) {
13+
successCount += 1;
14+
}
15+
}
16+
17+
assertEquals("maxCount:" + maxCount + " successCount:" + successCount, maxCount, successCount);
18+
}
19+
}

library/src/main/java/com/qiniu/android/http/connectCheck/ConnectChecker.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.qiniu.android.http.request.Request;
77
import com.qiniu.android.http.request.httpclient.SystemHttpClient;
88
import com.qiniu.android.storage.GlobalConfiguration;
9+
import com.qiniu.android.utils.LogUtil;
910
import com.qiniu.android.utils.SingleFlight;
1011
import com.qiniu.android.utils.Wait;
1112

@@ -66,37 +67,44 @@ private static void checkAllHosts(final CheckCompleteHandler completeHandler) {
6667
allHosts = allHosts.clone();
6768
final CheckStatus checkStatus = new CheckStatus();
6869
checkStatus.totalCount = allHosts.length;
70+
checkStatus.completeCount = 0;
6971
for (String host : allHosts) {
7072
checkHost(host, new CheckCompleteHandler() {
7173
@Override
7274
public void complete(boolean isHostConnected) {
7375

74-
synchronized (this) {
76+
synchronized (checkStatus) {
7577
checkStatus.completeCount += 1;
7678
}
7779
if (isHostConnected) {
7880
checkStatus.isConnected = true;
7981
}
8082
if (checkStatus.completeCount == checkStatus.totalCount) {
83+
LogUtil.i("== check all hosts has completed totalCount:" + checkStatus.totalCount + " completeCount:" + checkStatus.completeCount);
8184
completeHandler.complete(checkStatus.isConnected);
85+
} else {
86+
LogUtil.i("== check all hosts not completed totalCount:" + checkStatus.totalCount + " completeCount:" + checkStatus.completeCount);
8287
}
8388
}
8489
});
8590
}
8691

8792
}
8893

89-
private static void checkHost(String host, final CheckCompleteHandler completeHandler) {
94+
private static void checkHost(final String host, final CheckCompleteHandler completeHandler) {
9095

91-
Request request = new Request(host, "HEAD", null, null, 3);
96+
Request request = new Request(host, Request.HttpMethodHEAD, null, null, 3);
9297
SystemHttpClient client = new SystemHttpClient();
9398

99+
LogUtil.i("== checkHost:" + host);
94100
client.request(request, true, null, null, new IRequestClient.RequestClientCompleteHandler() {
95101
@Override
96102
public void complete(ResponseInfo responseInfo, UploadSingleRequestMetrics metrics, JSONObject response) {
97103
if (responseInfo.statusCode > 99) {
104+
LogUtil.i("== checkHost:" + host + "result: true");
98105
completeHandler.complete(true);
99106
} else {
107+
LogUtil.i("== checkHost:" + host + "result: false");
100108
completeHandler.complete(false);
101109
}
102110
}

library/src/main/java/com/qiniu/android/http/request/Request.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
public class Request {
88

9+
public static final String HttpMethodHEAD = "HEAD";
910
public static final String HttpMethodGet = "GET";
1011
public static final String HttpMethodPOST = "POST";
1112
public static final String HttpMethodPUT = "PUT";

library/src/main/java/com/qiniu/android/http/request/httpclient/SystemHttpClient.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,8 @@ private okhttp3.Request.Builder createRequestBuilder(final RequestClientProgress
214214
Headers allHeaders = Headers.of(currentRequest.allHeaders);
215215

216216
okhttp3.Request.Builder requestBuilder = null;
217-
if (currentRequest.httpMethod.equals(Request.HttpMethodGet)){
217+
if (currentRequest.httpMethod.equals(Request.HttpMethodHEAD) ||
218+
currentRequest.httpMethod.equals(Request.HttpMethodGet)){
218219
requestBuilder = new okhttp3.Request.Builder().get().url(currentRequest.urlString);
219220
for (String key : currentRequest.allHeaders.keySet()){
220221
String value = currentRequest.allHeaders.get(key);

0 commit comments

Comments
 (0)