【问题标题】:Is there any way for doing http connection pooling?有没有办法进行http连接池?
【发布时间】:2012-12-10 19:30:10
【问题描述】:

在 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 保持不变。

【问题讨论】:

  • 发布一些代码...关于您当前的操作方式。可以根据需要进行修改。

标签: java httpconnection


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 我认为 HTTP 不支持像 FTP 这样的持久连接,这会使连接池变得不可能。
  • 看来我对HTTP的理解是out of date
  • 操作人员说没有第三方但是@see PoolingClientConnectionManager。对于操作的具体情况,它是否可行/一个好主意是另一个问题......
【解决方案2】:

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

【讨论】:

猜你喜欢
  • 2017-04-27
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 2021-08-27
  • 2013-08-12
相关资源
最近更新 更多