最近在学习服务端Java Servlet,然后使用安卓客户端循环发起请求,测试一下,结果总是测试不到想要的结果.
客户端代码如下:
for (int i = 0; i < 100; i++) { SgLog.d("i=" + i); Map<String, String> params = new HashMap<>(); params.put("startTime", "" + System.currentTimeMillis()); SgHttp.INSTANCE.setMainThreadCallback(false).sendRequest(HttpMethod.GET, "http://192.168.21.7:9999/checkVersion.do", params, new SgHttp .IRequestCallback() { @Override public void success(String s) { SgLog.d("耗时:" + (System.currentTimeMillis() - Long.parseLong(s))); } @Override public void error(String s) { SgLog.d("请求错误:" + s); } }); }就是简单的请求.请求方式是封装的okhttp
服务端代码如下:
public void doFilter( ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { System.out.println(Thread.currentThread().getName()+" 进入时间:"+System.currentTimeMillis()); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } response.getWriter().print(request.getParameter("startTime")); }也就是简单的等待3秒后把参数传回去.
结果就是这样
01-25 15:51:29.371 2311-2327/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3021
01-25 15:51:29.379 2311-2328/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3025
01-25 15:51:29.383 2311-2329/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3024
01-25 15:51:29.391 2311-2330/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3024
01-25 15:51:32.371 2311-2332/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:5997
01-25 15:51:32.399 2311-2324/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:6021
01-25 15:51:32.415 2311-2333/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:6031
01-25 15:51:32.427 2311-2328/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:6038
01-25 15:51:32.443 2311-2329/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:6050
01-25 15:51:35.399 2311-2330/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:9008
01-25 15:51:35.439 2311-2332/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:9045
01-25 15:51:35.471 2311-2327/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:9070
01-25 15:51:35.471 2311-2324/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:9069
01-25 15:51:35.479 2311-2333/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:9073
01-25 15:51:38.439 2311-2329/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:12029
01-25 15:51:38.475 2311-2328/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:12064
01-25 15:51:38.495 2311-2330/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:12079
01-25 15:51:38.507 2311-2332/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:12087
01-25 15:51:38.515 2311-2327/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:12091
从返回结果看出来,tomcat好像每次只处理5个请求,一开始以为是tomcat线程池问题, 各种百度谷歌.把tomcat配置文件都设置了一遍,然而都没起什么作用.正当一筹莫展的时候,朋友和我说是不是你手机设置了,一次只发5个出去,然后我查看了一下okhttp的源码,果然....... 下面是okhttp部分代码:
public final class Dispatcher { private int maxRequests = 65; private int maxRequestsPerHost = 5; private Runnable idleCallback; /** Executes calls. Created lazily. */ private ExecutorService executorService; /** Ready async calls in the order they'll be run. */ private final Deque<AsyncCall> readyAsyncCalls = new ArrayDeque<>(); /** Running asynchronous calls. Includes canceled calls that haven't finished yet. */ private final Deque<AsyncCall> runningAsyncCalls = new ArrayDeque<>(); /** Running synchronous calls. Includes canceled calls that haven't finished yet. */ private final Deque<RealCall> runningSyncCalls = new ArrayDeque<>(); public Dispatcher(ExecutorService executorService) { this.executorService = executorService; }有个默认值 每次最多并发5个
![大哭](http://static.blog.csdn.net/xheditor/xheditor_emot/default/wail.gif)
1-25 15:57:50.019 2400-2417/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3018
01-25 15:57:50.027 2400-2418/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3024
01-25 15:57:50.043 2400-2420/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3020
01-25 15:57:50.047 2400-2419/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3034
01-25 15:57:50.051 2400-2421/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3024
01-25 15:57:50.059 2400-2422/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3026
01-25 15:57:50.063 2400-2423/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3022
01-25 15:57:50.083 2400-2424/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3035
01-25 15:57:50.103 2400-2425/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3046
01-25 15:57:50.115 2400-2427/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3036
01-25 15:57:50.123 2400-2426/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3059
01-25 15:57:50.123 2400-2429/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3036
01-25 15:57:50.123 2400-2428/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3041
01-25 15:57:50.139 2400-2430/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3043
01-25 15:57:50.143 2400-2431/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3029
01-25 15:57:50.143 2400-2432/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3027
01-25 15:57:50.159 2400-2434/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3024
01-25 15:57:50.159 2400-2433/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3038
01-25 15:57:50.167 2400-2435/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3027
01-25 15:57:50.175 2400-2436/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3024
01-25 15:57:50.179 2400-2437/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3022
01-25 15:57:50.187 2400-2438/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3025
01-25 15:57:50.199 2400-2439/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3023
01-25 15:57:50.227 2400-2440/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3041
01-25 15:57:50.231 2400-2441/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3036
01-25 15:57:50.231 2400-2442/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3033
01-25 15:57:50.239 2400-2443/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3028
01-25 15:57:50.255 2400-2444/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3038
01-25 15:57:50.263 2400-2446/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3027
01-25 15:57:50.267 2400-2447/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3027
01-25 15:57:50.271 2400-2445/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3039
01-25 15:57:50.279 2400-2448/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3032
01-25 15:57:50.283 2400-2449/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3020
01-25 15:57:50.299 2400-2450/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3026
01-25 15:57:50.315 2400-2451/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3035
01-25 15:57:50.323 2400-2453/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3026
01-25 15:57:50.327 2400-2452/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3038
01-25 15:57:50.343 2400-2454/org.z2y.sdk D/SgLog: SdkTools.java-------耗时:3040
这才是正确的结果,算是给自己上了一课吧..虽然测试方式不太科学,但总归可以体现出一些问题.