Skip to content

Commit df057d0

Browse files
author
yangsen
committed
optimize http version chose logic
1 parent 5192960 commit df057d0

File tree

4 files changed

+30
-7
lines changed

4 files changed

+30
-7
lines changed

library/src/main/java/com/qiniu/android/http/networkStatus/NetworkStatusManager.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ public void updateNetworkStatus(String type, int speed) {
7070
if (status == null) {
7171
status = new NetworkStatus();
7272
networkStatusInfo.put(type, status);
73+
} else {
74+
speed = (int)((float)speed * 0.4 + (float)status.getSpeed() * 0.6);
7375
}
7476
status.setSpeed(speed);
7577

@@ -169,9 +171,10 @@ private synchronized void setupRecorder() {
169171
}
170172
}
171173

174+
protected static final int DefaultSpeed = 600;
172175
public static class NetworkStatus {
173176

174-
private int speed = 600;
177+
private int speed = DefaultSpeed;
175178

176179
public int getSpeed() {
177180
return speed;

library/src/main/java/com/qiniu/android/http/networkStatus/UploadServerNetworkStatus.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public static IUploadServer getBetterNetworkServer(IUploadServer serverA, IUploa
88
return isServerNetworkBetter(serverA, serverB) ? serverA : serverB;
99
}
1010

11-
// 如果两个 Server 网速相同优先使用 serverA
11+
// 如果两个 Server 网速相同且类别相同优先使用 serverA,类别不同优先使用 Http3
1212
public static boolean isServerNetworkBetter(IUploadServer serverA, IUploadServer serverB) {
1313
if (serverA == null) {
1414
return false;
@@ -27,6 +27,23 @@ public static boolean isServerNetworkBetter(IUploadServer serverA, IUploadServer
2727
NetworkStatusManager.NetworkStatus serverStatusA = NetworkStatusManager.getInstance().getNetworkStatus(serverTypeA);
2828
NetworkStatusManager.NetworkStatus serverStatusB = NetworkStatusManager.getInstance().getNetworkStatus(serverTypeB);
2929

30-
return serverStatusB.getSpeed() < serverStatusA.getSpeed();
30+
int serverASpeed = serverStatusA.getSpeed();
31+
int serverBSpeed = serverStatusB.getSpeed();
32+
String serverAHttpVersion = serverA.getHttpVersion();
33+
String serverBHttpVersion = serverB.getHttpVersion();
34+
if (serverAHttpVersion.equals(IUploadServer.HttpVersion3) && !serverAHttpVersion.equals(serverBHttpVersion)) {
35+
if (serverASpeed < 200 && serverBSpeed == NetworkStatusManager.DefaultSpeed) {
36+
return true;
37+
} else if (serverASpeed > NetworkStatusManager.DefaultSpeed && serverBSpeed > 400) {
38+
return false;
39+
}
40+
} else if (serverBHttpVersion.equals(IUploadServer.HttpVersion3) && !serverAHttpVersion.equals(serverBHttpVersion)) {
41+
if (serverBSpeed < 200 && serverASpeed == NetworkStatusManager.DefaultSpeed) {
42+
return true;
43+
} else if (serverASpeed > NetworkStatusManager.DefaultSpeed && serverBSpeed > 400) {
44+
return false;
45+
}
46+
}
47+
return serverBSpeed <= serverASpeed;
3148
}
3249
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.qiniu.android.http.request;
22

3+
import android.util.Log;
4+
35
import com.qiniu.android.collect.ReportItem;
46
import com.qiniu.android.collect.UploadInfoReporter;
57
import com.qiniu.android.http.ResponseInfo;
@@ -220,7 +222,7 @@ private void updateHostNetworkStatus(ResponseInfo responseInfo, IUploadServer se
220222
}
221223
long byteCount = requestMetrics.bytesSend();
222224
long milliSecond = requestMetrics.totalElapsedTime();
223-
if (milliSecond <= 0) {
225+
if (milliSecond <= 0 || byteCount < 1024) {
224226
return;
225227
}
226228

@@ -235,9 +237,9 @@ private void updateHostNetworkStatus(ResponseInfo responseInfo, IUploadServer se
235237
} else if (byteCount <= 128 * 1024) {
236238
milliSecond = (long)((float)milliSecond * 0.45);
237239
} else if (byteCount <= 256 * 1024) {
238-
milliSecond = (long)((float)milliSecond * 0.73);
240+
milliSecond = (long)((float)milliSecond * 0.76);
239241
} else if (byteCount <= 512 * 1024) {
240-
milliSecond = (long)((float)milliSecond * 0.86);
242+
milliSecond = (long)((float)milliSecond * 0.88);
241243
} else if (byteCount <= 1024 * 1024) {
242244
milliSecond = (long)((float)milliSecond * 0.95);
243245
}
@@ -247,6 +249,7 @@ private void updateHostNetworkStatus(ResponseInfo responseInfo, IUploadServer se
247249
}
248250

249251
int speed = (int) (byteCount / milliSecond);
252+
Log.d("speed","httpVersion:" + server.getHttpVersion() + " byte:" + byteCount/1024.0 + " milliSecond:" + milliSecond + " speed:" + speed);
250253
String type = NetworkStatusManager.getNetworkStatusType(server.getHttpVersion(), server.getHost(), server.getIp());
251254
NetworkStatusManager.getInstance().updateNetworkStatus(type, speed);
252255
}

library/src/main/java/com/qiniu/android/utils/AsyncRun.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public final class AsyncRun {
1919

2020
private static final Handler mainThreadHandler = new Handler(Looper.getMainLooper());
2121

22-
private static int threadPoolSize = 3;
22+
private static int threadPoolSize = 1;
2323
private static int maxThreadPoolSize = 6;
2424
private static ExecutorService executorService = new ThreadPoolExecutor(threadPoolSize, maxThreadPoolSize,
2525
1000L, TimeUnit.MILLISECONDS,

0 commit comments

Comments
 (0)