Pet*_*ter 2 java urlconnection httpurlconnection
我有一个用例,其中一个servlet(具有相当高的并发使用)使得传出的URLConnection检索一些数据REST样式作为其正常的服务器端处理逻辑的一部分.每次调用servlet时都会创建并使用该连接,因为URL可能不同(但域始终相同).我希望确保尽可能优化地执行此操作,以便端口和连接的打开时间不会超过应用程序服务器上的时间,但如果适用,则会重新使用.
在URLConnection上,Javadocs看起来有点模糊:
'在请求之后调用URLConnection的InputStream或OutputStream上的close()方法可以释放与此实例关联的网络资源,除非特定协议规范为其指定不同的行为.
在HttpURLConnection上:
'每个HttpURLConnection实例用于发出单个请求,但与HTTP服务器的基础网络连接可以由其他实例透明地共享.在请求之后调用HttpURLConnection的InputStream或OutputStream上的close()方法可以释放与此实例关联的网络资源,但不会影响任何共享持久连接.如果持久连接在那时处于空闲状态,则调用disconnect()方法可能会关闭底层套接字.
目前,正在使用URLConnection并且输入流仅按照以下代码关闭(错误处理和URL读取被删除,因为它们与问题无关).我的想法是这将清理流资源,但允许重用底层套接字(因为请求总是在同一个域,具有不同的URL路径).有关如何进一步优化的任何建议将不胜感激.
URL requestUrl = new URL(location);
URLConnection urlConnection = requestUrl.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));
//reading code here
br.close();
Run Code Online (Sandbox Code Playgroud)
您可以考虑使用Apache的HttpClient.我们在一个发送请求的应用程序中使用它,实际上,每天有几百万次负载在少数几个系统上进行平衡.我们已经使用了一个HttpClient对象池,我不确定是否有必要,因为我们不会在调用之间保持连接打开,但代码早于我的时间,也许他们找到了它的原因.
| 归档时间: |
|
| 查看次数: |
2752 次 |
| 最近记录: |