我在Jersey + Grizzly实施了长枪。为了测试我的问题,我现在只有asyncResponce的资源,即挂起请求。像这样:
@GET
@Produces("application/json")
public void asyncGetWithTimeout(@Suspended final AsyncResponse asyncResponse) {
asyncResponse.setTimeoutHandler(new TimeoutHandler() {
@Override
public void handleTimeout(AsyncResponse response) {
response.resume(Response.status(Response.Status.SERVICE_UNAVAILABLE)
.entity("{\"response\":\"timeout\"}").header("Access-Control-Allow-Origin", "*").build());
}
});
asyncResponse.setTimeout(30, TimeUnit.SECONDS);
}
一切正常,直到暂停请求的数量超过7.然后整个网络应用程序卡住,甚至是常规同步请求。怎么可能,泽西岛只有7个主题?对不起,我在并发和网络应用方面不是很好,只是没想到会出现这种问题。
答案 0 :(得分:1)
我解决了这个问题。实际上存在客户端问题,并且知道"每个主机名的最大连接数"。此编号是浏览器/应用程序特定的。因此,我在Chrome中测试我的网络应用程序并获得7.正如您从下表中看到的那样,我只是将其误算为1。
每个服务器/代理的默认同时持久连接数:
Firefox 2: 2
Firefox 3+: 6
Opera 9.26: 4
Opera 12: 6
Safari 3: 4
Safari 5: 6
IE 7: 2
IE 8: 6
IE 10: 8
Chrome: 6