支持并发的httpclient(基于tcp连接池以及netty)
闲来无事,将曾经自己写的一个库放出来吧。
。
有的时候会有这样子的需求:
(1)serverA通过HTTP协议来訪问serverB
(2)serverA可能会并发的像B发送非常多HTTP请求
类似于上述的需求。可能并不常见。
。。由于在业务中确实遇到了这样子的场景,所以就自己动手开发了一个库。
。。
实现原理:
(1)底层IO通过netty搞
(2)维护一个tcp的长连接池,这样子就不用每次发送请求还要建立一个tcp连接了。。。
以下直接来看怎么用吧:
(1)最常规的使用方法,向www.baidu.com发送100次get请求:
ClientPool pool = new NettyClientPool(2, "www.baidu.com");
pool.start();
for (int i = 0; i < 100; i++) {
Request re = new Request("/", Request.RequestMethod.GET);
pool.request(re).addListener(new Future.Listener() {
@Override
public void complete(Object arg) {
Response res = (Response)arg;
System.out.println(res.getBody().toString(Charset.forName("utf-8")));
} @Override
public void exception(Throwable t) { }
});
}
这里能够看到,事实上这里是异步的提交的,所以须要注冊一些回调。。。
(2)使用同步的方式发送请求。这里就弄成Post请求吧:
ClientPool pool = new NettyClientPool(2, "www.baidu.com");
pool.start();
Request re = new Request("/", Request.RequestMethod.POST);
re.getBody().writeBytes("aaaa".getBytes(Charset.forName("utf-8")));
try {
Response response = pool.requestWithTimeOut(re, 2000).sync();
System.out.println(response.getBody().toString(Charset.forName("utf-8")));
} catch (Throwable throwable) {
System.out.println(throwable);
}
pool.stop();
这里能够看到,提交请求的时候还带有超时的额,也就是2000毫秒都还没有搞完。那么就不搞了。
。
好了,就介绍这些吧,反正post和get请求都有。支持超时控制。。
。
支持并发。。
。至于说性能嘛。。。应该不差吧,也不知道该跟谁比較。。
。。
、
最后给出github地址吧:
https://github.com/2225377fjs/HttpClientPool
支持并发的httpclient(基于tcp连接池以及netty)的更多相关文章
- 查看 Apache并发请求数及其TCP连接状态
查看 Apache并发请求数及其TCP连接状态 (2011-06-27 15:08:36) 服务器上的一些统计数据: 1)统计80端口连接数 netstat -nat|grep -i "80 ...
- 查看 并发请求数及其TCP连接状态【转】
服务器上的一些统计数据: 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数ps -ef|grep httpd|wc ...
- 查看 并发请求数及其TCP连接状态
服务器上的一些统计数据: 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数ps -ef|grep httpd|wc ...
- 查看 Apache并发请求数及其TCP连接状态【转】
查看 Apache并发请求数及其TCP连接状态 (2011-06-27 15:08:36) 服务器上的一些统计数据: 1)统计80端口连接数netstat -nat|grep -i "80& ...
- 带连接池的netty客户端核心功能实现剖解
带连接池的netty客户端核心功能实现剖析 带连接池的netty的客户端核心功能实现剖析 本文为原创,转载请注明出处 源码地址: https://github.com/zhangxianwu/ligh ...
- HttpClient 4.3连接池参数配置及源码解读
目前所在公司使用HttpClient 4.3.3版本发送Rest请求,调用接口.最近出现了调用查询接口服务慢的生产问题,在排查整个调用链可能存在的问题时(从客户端发起Http请求->ESB-&g ...
- 查看http的并发请求数及其TCP连接状态
统计80端口的连接数据 netstat -nat | grep -i "80" | wc -l 统计httpd协议连接数 ps -ef | grep httpd | wc -l 统 ...
- SpringBoot 基于lettuce 连接池 配置redis多数据源操作 生产配置
添加pom<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons- ...
- 基于TCP连接的socket套接字编程
基于TCP协议的套接字编程(简单) 服务端 import socket server = socket.socket() server.bind( ('127.0.0.1', 9999) ) serv ...
随机推荐
- js数组并集,交集,差集
js数组并集,交集,差集的计算方式汇总 一. new Set 方式实现 这种方式实现起来比较简单,原理就是参考new Set可以去重的功能 ,关于去重可以点击 https://www.haorooms ...
- 【codeforces 812A】Sagheer and Crossroads
[题目链接]:http://codeforces.com/contest/812/problem/A [题意] 有一个小箭头指的那个地方; 指的就是人行道路; 然后p[i]指的就是那4个人行道是不是绿 ...
- Css学习总结(2)——60个有用CSS代码片段
1.垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,可以很优雅的解决这个困惑: .verticalcenter{ position: re ...
- hbase的几种访问方式
Hbase的访问方式 1.Native Java API:最常规和高效的访问方式: 2.HBase Shell:HBase的命令行工具,最简单的接口,适合HBase管理使用: 3.Thrift Gat ...
- 工具-WIN7-内存占用过高解决办法
我的WIN7内存竟然吃到了7.6G,太不可思意了 第一步 看看网上的解决办法 http://jingyan.baidu.com/article/870c6fc31060eab03fe4beee.htm ...
- angular-基础
AngularJs特点: 1.依赖注入 2.模块化 3.双向绑定 4.语义化标签 当网页加载完毕,AngularJS 自动开启. ng-app 指令告诉 AngularJS,<div> 元 ...
- HH实习(hpu1287)(斐波那契运用)
HH实习 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 44 Solved: 29 [Submit][id=1287">Status ...
- php设计模式之工厂方法模式
php设计模式之工厂方法模式 工厂方法模式 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Pol ...
- hpuoj--1287--HH实习(斐波那契数巧用)
问题 D: HH实习 时间限制: 1 Sec 内存限制: 128 MB 提交: 53 解决: 37 [提交][状态][讨论版] 题目描述 这学期到了十五周了,HH突然要去实训中心实习了,想到要拿着 ...
- Kali linux 2016.2(Rolling)中的Exploits模块详解
简单来将,这个Exploits模块,就是针对不同的已知漏洞的利用程序. root@kali:~# msfconsole Unable to handle kernel NULL pointer der ...