1

java中是否有任何方法可以在不使用httpclient、http-commons等第三方api的情况下进行http连接池?

在我的情况下,我想打开一个带有特定 servlet 的 url 的连接,并且我的查询字符串发生了变化,但是每当我打开一个连接时,它就会打开一个新连接,就像我看到的那样做 'netstat -anp | grep portno' 我不想要?

String sendMessageUrl="http\://ip\:portno/contextpath/servlet/Servletname?parameter1\=&parameter2\=";
URL testURl=new URL(sendMessageUrl.replaceAll("&", name+"&")+surname);  
HttpURLConnection httpConnection=(HttpURLConnection)testURl.openConnection();
httpConnection.connect();
if(httpConnection.getResponseCode()==200)
{
   System.out.println("Success");
}

这里只有参数 1 和参数 2 发生变化,只是整个 url 保持不变。

4

2 回答 2

2

当创建这些对象的成本很高时,您可以将对象池化,例如创建数据库连接的成本很高,因此池化是有意义的。在不使用第三方框架的情况下,仍然可以池化 HTTP 连接,毕竟池只是以前创建的类实例的集合。

至少要创建一个管理 HTTP 连接池的类,您至少需要执行以下操作:

  1. 从池中检索一个实例(正在使用的对象)
  2. 将实例放回池中(不再使用的对象)
  3. 游泳池大小

您可能还需要将以下功能视为可能值得在池中使用的功能:

  1. 重新连接过时的实例
  2. 最大空闲时间,记住一个空闲连接仍然在消耗资源
  3. 在抛出异常之前连接可以使用的时间
  4. 一种验证连接是否有效的方法,例如对于一个数据库连接,执行一个简单的 SQL

还有许多其他事情需要考虑,但是如果您自己构建它,这取决于您的确切要求。您应该尝试一下,如果遇到问题,请就您的具体问题向 SO 寻求帮助。

于 2012-12-10T19:50:52.523 回答
1

您可以使用HttpURLConnection的一部分JDK。它在底层使用 TCP 连接池

于 2012-12-10T20:21:07.167 回答