我正在使用基于JAX-WS的客户端与远程Web服务器通信的应用程序。我面临的问题是应用程序在请求完成后没有正确关闭HTTP连接。套接字处于CLOSED_WAIT状态。对于CLOSED_WAIT中的所有套接字,lsof -p的出现如下:
52u IPv6 6467002 TCP gsilin2.india.com:31842->gsilin2.india.com:7073(CLOSE_WAIT) 53u IPv6 6467357 TCP gsilin2.india.com:31970->gsilin2.india.com:7073(CLOSE_WAIT) 54u IPv6 6467480 TCP gsilin2.india.com:32015->gsilin2.india.com:7073(CLOSE_WAIT) 55u IPv6 6467368 TCP gsilin2.india.com:31974->gsilin2.india.com:7073(CLOSE_WAIT)
形成上面的场景,我的理解是JAX-WS内部没有关闭底层的HTTP连接。以下是应用程序中使用的代码段。
BindingProvider bindingProvider = (BindingProvider)atuaPortType;
bindingProvider.getBinding().setHandlerChain(handlerChain);
Map<String, Object> map=bindingProvider.getRequestContext();
.....
.....
map.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, serverurl);
Map map1 = new HashMap();
map1.put("Connection", Collections.singletonList("close"));
map.put(MessageContext.HTTP_REQUEST_HEADERS, map1);
当应用程序必须向Web服务器发送更多请求时,应用程序将因“打开文件太多”错误而崩溃。我找不到任何解决方案。
请帮我解决这个问题。
提前致谢。
Chandan Talukdar, 印度班加罗尔
答案 0 :(得分:0)
使用最新版本的JAX-WS解决了该问题。随java提供的JAX-WS库不能正确关闭套接字。请点击以下链接