`
hqman
  • 浏览: 353296 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

httpclient 并行问题

    博客分类:
  • java
阅读更多

  httpclient是个好东西,之前做过抓取网页,现在用来做多个不同站点信息通信(简单webservice)

具体做法,在客户端模拟表单提交,服务器端跟普通表单处理一样,安全性通过 ip 密码来简单解决。

  在实际生产中碰到一个问题,并发提交调用 webservice时候产生死锁问题。

 

原来是设置问题:

 

 

写道
httpclient的多线程处理

  使用多线程的主要目的,是为了实现并行的下载。在httpclient运行的过程中,每个http协议的方法,使用一个 HttpConnection实例。由于连接是一种有限的资源,每个连接在某一时刻只能供一个线程和方法使用,所以需要确保在需要时正确地分配连接。 HttpClient采用了一种类似jdbc连接池的方法来管理连接,这个管理工作由 MultiThreadedHttpConnectionManager完成。
MultiThreadedHttpConnectionManager connectionManager =
new MultiThreadedHttpConnectionManager();
HttpClient client = new HttpClient(connectionManager);
此是,client可以在多个线程中被用来执行多个方法。每次调用HttpClient.executeMethod() 方法,都会去链接管理器申请一个连接实例,申请成功这个链接实例被签出(checkout),随之在链接使用完后必须归还管理器。管理器支持两个设置:
maxConnectionsPerHost 每个主机的最大并行链接数,默认为2
maxTotalConnections 客户端总并行链接最大数,默认为20

  管理器重新利用链接时,采取早归还者先重用的方式(least recently used approach)。
  由于是使用HttpClient的程序而不是HttpClient本身来读取应答包的主体,所以HttpClient无法决定什么时间连接不再使用了,这也就要求在读完应答包的主体后必须手工显式地调用releaseConnection()来释放申请的链接。
MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
connectionManager.setMaxConnectionsPerHost(20);
HttpClient client = new HttpClient(connectionManager);
...
// 在某个线程中。
GetMethod get = new GetMethod("http://jakarta.apache.org/");
try {
client.executeMethod(get);
// print response to stdout
System.out.println(get.getResponseBodyAsStream());
} finally {
// be sure the connection is released back to the connection
// manager
get.releaseConnection();
}
 
分享到:
评论

相关推荐

    使用java的HttpClient实现多线程并发

    主要介绍了使用java的HttpClient实现多线程并发的相关资料,需要的朋友可以参考下

    em-http-request, 异步HTTP客户端( EventMachine + ruby ).zip

    em-http-request, 异步HTTP客户端( EventMachine + ruby ) EM-HTTP-Request 异步( EventMachine ) HTTP客户端,支持:异步 HTTP API用于单&并行请求执行保持活动状态和HTTP管道支持自动跟随 3xx 重定向最大深度自动 ...

    BSP Async SSP ASP 的比较

    分布式机器学习四种同步机制的简单总结,包括BSP(Bulk Synchronous Parallel)批量同步并行、Async(Asynchronous Parallel)全异步并行、SSP(Stale Synchronous Parallel)延迟同步并行、ASP大概同步并行。

    esp32_https_server:ESP32 Arduino Core的替代ESP32 Web服务器实现,支持HTTPS和HTTP

    并行处理多个客户端(由于内存限制,最多3-4个TLS客户端)。 Connection: keep-alive用法Connection: keep-alive和SSL会话重用可减少SSL握手的开销并加快数据传输。依存关系该库是自包含的,只需要Arduino和ESP32...

    Volley-demo-master

    Android 提供了两个 HTTP 客户端AndroidHttpClient (扩展自 apache HTTPClient)和HttpUrlConnection来发出 HTTP 请求。 两者都有自己的优点和缺点。 在开发应用程序时,我们编写处理所有 HTTP 请求的 HTTP 连接类...

    SDriver:用于Slack API的Delphi包装器

    使用System.Threading的异步实现(并行编程库) 相关链接 Embarcadero Delphi是一种现代,强大而有效的语言和开发工具。 通过以下链接了解有关它的更多信息: 免责声明 Delphi风格化头盔图标是Embarcadero ...

    web-scraping:网页抓取

    网页抓取提供一个API,该API返回给定的公共Github存储库的所有文件的行...MemoryCache(本机) Redis缓存(StackExchange.Redis) HttpClient(本机) AngleSharp(HTML解析器) 使用XUnit和FluentAssertions进行单元测

    parseq:异步Java更容易

    final Task< Response> google = HttpClient . get( " http://www.google.com " ) . task(); engine . run(google); google . await(); System . out . println( " Google Page: " + google . get() . ...

    ServletStatistics

    使用 httpclient apache jar、junt 4、log4j。 导航到测试资源以查找示例。 ######### 项目意图 发出 100 个 HTTP GET 请求并打印 以下是 stdout 响应时间的统计信息: • 第 10、第 50、第 90、第 95、第 99 个...

    Xfrogcn.AspNetCore.Extensions:AspNetCore基础扩展库

    ASP.NET Core扩展库是针对.NET Core常用功能的扩展,包含日志、Token提供器、并行队列处理、HttpClient扩展、轻量级的DTO类型映射等功能。 日志扩展 扩展库中,我们对Serilog日志库进行了简单的封装使其更加容易配置...

    mooa:Mooa是一个为Angular服务的微前端框架。Single-spa的Angular独立部署微前端框架

    构建插件化的Web开发平台,满足业务快速变化及多元化多团队并行开发的需求构建服务化的中间件,建造高可用及高替代的前端微服务平台支持前端的独立交付及部署用例如果您心情不好,请提供案例以帮助该项目。...

Global site tag (gtag.js) - Google Analytics