闲来无事,将曾经自己写的一个库放出来吧。

有的时候会有这样子的需求:

(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)的更多相关文章

  1. 查看 Apache并发请求数及其TCP连接状态

    查看 Apache并发请求数及其TCP连接状态 (2011-06-27 15:08:36) 服务器上的一些统计数据: 1)统计80端口连接数 netstat -nat|grep -i "80 ...

  2. 查看 并发请求数及其TCP连接状态【转】

    服务器上的一些统计数据: 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数ps -ef|grep httpd|wc ...

  3. 查看 并发请求数及其TCP连接状态

    服务器上的一些统计数据: 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数ps -ef|grep httpd|wc ...

  4. 查看 Apache并发请求数及其TCP连接状态【转】

    查看 Apache并发请求数及其TCP连接状态 (2011-06-27 15:08:36) 服务器上的一些统计数据: 1)统计80端口连接数netstat -nat|grep -i "80& ...

  5. 带连接池的netty客户端核心功能实现剖解

    带连接池的netty客户端核心功能实现剖析 带连接池的netty的客户端核心功能实现剖析 本文为原创,转载请注明出处 源码地址: https://github.com/zhangxianwu/ligh ...

  6. HttpClient 4.3连接池参数配置及源码解读

    目前所在公司使用HttpClient 4.3.3版本发送Rest请求,调用接口.最近出现了调用查询接口服务慢的生产问题,在排查整个调用链可能存在的问题时(从客户端发起Http请求->ESB-&g ...

  7. 查看http的并发请求数及其TCP连接状态

    统计80端口的连接数据 netstat -nat | grep -i "80" | wc -l 统计httpd协议连接数 ps -ef | grep httpd | wc -l 统 ...

  8. SpringBoot 基于lettuce 连接池 配置redis多数据源操作 生产配置

    添加pom<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons- ...

  9. 基于TCP连接的socket套接字编程

    基于TCP协议的套接字编程(简单) 服务端 import socket server = socket.socket() server.bind( ('127.0.0.1', 9999) ) serv ...

随机推荐

  1. LoadRunner监控Window/Unix系统资源的配置

    LoadRunner监控Window/Unix系统资源需要做两件事情: 1.配置被监视的服务器,以便于LoadRunner能够获取系统资源使用情况的数据 2.在LoadRunner的Controlle ...

  2. Http请求和相应模式(B/S)(1)

    B/S模式 服务器端的接受数据 :浏览器端 表单格式 <form></form> GET:请求方式, /index.html  Web浏览器上的资源路径 uname=bjxt& ...

  3. selenium的报错信息:selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Compound class names not permitted

    报错信息:selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Compound class ...

  4. Hibernate中session回话的get方法和load方法的区别

    1.报错方式不同: 前提:获取的数据不存在 get方法会报异常:空指针异常 load方法会报异常:对象为找到异常,给定值没有行存在. 2.load方法 这种方式总是会返回一个代理而不是真正得去查询数据 ...

  5. caffe环境配置2

    参考链接: http://blog.csdn.net/enjoyyl/article/details/47397505 http://blog.csdn.net/baobei0112/article/ ...

  6. Maven远程仓库:pom依赖以及jar包下载

    Maven远程仓库:pom依赖xml配置以及jar包下载: 地址1: http://mvnrepository.com/ 地址2: http://172.16.163.52:8081/nexus/#w ...

  7. inline元素和inline-block元素的4px空白间距解决方案

    实在不想写了,要吐了,看到一篇讲的比较全的文章,直接粘链接了 inline元素和inline-block元素的4px空白间距解决方案 出自脚本之家

  8. Synchronization (computer science)

    过程同步.数据同步. In computer science, synchronization refers to one of two distinct but related concepts: ...

  9. “.”开头,以"}"结尾,中间是任意字符的正则

    "."开头,以"}"结尾,中间是任意字符的正则 /^\..+\{$/

  10. 由Request Method:OPTIONS初窥CORS(转)

    刚接触前端的时候,以为HTTP的Request Method只有GET与POST两种,后来才了解到,原来还有HEAD.PUT.DELETE.OPTIONS…… 目前的工作中,HEAD.PUT.DELE ...