支持并发的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 ...
随机推荐
- Vue基础知识点
基础知识: vue的生命周期: beforeCreate/created.beforeMount/mounted.beforeUpdate/updated.beforeDestory/destorye ...
- Image Processing for Very Large Images
The key idea here is the partial image descriptor VIPS(VASARI Image Processing System) 是近几年逐渐兴起的针对大图 ...
- 搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群
笔记内容:搭建ELK日志分析平台(上)-- ELK介绍及搭建 Elasticsearch 分布式集群笔记日期:2018-03-02 27.1 ELK介绍 27.2 ELK安装准备工作 27.3 安装e ...
- PHP中用下标符号[]去读取字符串的逻辑
PHP中 [(下标)] 符号不仅能够应用于数组和对象,还能够应用于字符串,假设不注意非常easy出错. 比方获取一个网络接口,正常情况下会返回一个数组结构的json,经过解析之后结果为: array( ...
- php和js区别
php和js区别 两者在语法上类似,楼上说的对,js=javascript是工作在浏览器端的脚本语言,他所提交的数据是交给浏览器来处理的.但是现在的Ajax技术已经可以把js提交的数据交付到浏览器来处 ...
- JavaScript中Math常用方法
title: JavaScript中Math常用方法 toc: false date: 2018-10-13 12:19:31 Math.E --2.718281828459045,算数常量e Mat ...
- Kettle学习系列之Kettle能做什么?(三)
不多说,直接上干货! PDI(Kettle) 都能做什么? 可以说凡是有数据整合.转换.迁移的场景都可以使用PDI,他代替了完成数据转换任务的手工编码,降低了开发难度. 同时,我们可以在自己实际业务里 ...
- xshell同时发送多条命令
1.如图,勾选撰写栏 勾选全部会话 下面的是一个很方便的小技巧.分屏 如下图垂直排列 水平排列等等
- dev c++与VC assist的杂记
最近要处理一些数据,于是把旧本拿出来用用.但是发现旧本运行速度很慢. 分析之后发现是瑞星的老版本程序里面加了游戏的云存储节点的注册表键.果断把该键删了之后,CPU使用率从66%以上降到24%左右. 然 ...
- STM8S103内存详析
STM8S103的RAM有1k,0x00-0x3FF(RAM和ROM统一编址),其中0x200-0x3ff共512个字节默认为堆栈,剩余的低端512个字节又分为了Zero Page和剩余的RAM(简称 ...