我有其中一个servlet(即具有相当高的同时使用)使得呼出的URLConnection检索某些数据REST风格作为其正常的服务器端处理逻辑的一部分的使用情况。该连接被创建,并且每个为URL是潜在的不同(但域总是相同)小服务程序被调用时使用。我想确保它这样做尽可能优化,以便端口和连接不会保持打开的时间比他们必须在应用服务器上,但如果应用被重新使用。

的Javadoc显得有点模糊 - 上的URLConnection:

“调用的close()上的请求可以释放与此实例相关联的网络资源,除非特定的协议规范为其指定不同的行为后的URLConnection的InputStream的或OutputStream的方法。”

在HttpURLConnection的:

'每个HttpURLConnection实例是用来使一个单一的请求,但是到HTTP服务器底层网络连接可以通过其他实例被透明地共享。呼叫上的HttpURLConnection类的的InputStream或OutputStream的关闭()方法的请求后,可能释放与此实例相关联的网络资源,但对任何共享的持久连接没有影响。如果持久连接是当时否则空闲调用disconnect()方法可以关闭基础套接字。

目前,正在使用一个URLConnection和InputStream的仅关闭,如下面的代码(错误处理和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();
有帮助吗?

解决方案

我觉得你有什么是好,因为它要开始使用Java的实现。如果速度是一个巨大的关注和Java的实现是占用内存或太慢,写自己的连接类。

其他提示

您可以考虑使用Apache的HttpClient的。我们用它在发送请求,从字面上看,几百万次,每天负荷过的少数系统平衡的应用程序。我们已经使用HttpClient的对象,我不知道是必要的游泳池,因为我们不保持通话之间的开放的连接,但这里的代码,也许早于我的时候,他们发现它的一个原因。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top