一、HttpCore
- httpcore实现了一套HTTP 协议的基础组件,为构建客户端/代理/服务器端 HTTP 服务一致的 API。
- 支持两种I/O模式:BIO和NIO
-
- BIO:阻塞型Blocking I/O,通信模型:1:1模型:通常由一个独立的Acceptor线程(服务器)负责监听客户端的连接,它接收到客户端连接请求之后为每个客户端创建一个新的线程进行链路处理 处理完成后,通过输出流返回应答给客户端,线程销毁。流程: Client->server->新建线程处理请求并返回响应->销毁线程
- NIO:非阻塞型Non-Blocking I/O,通信模型:
-
-
- 伪异步I/O模型:通过线程池管理线程。Client->server->线程池->分配线程处理请求并返回响应->线程池回收线程。
- NIO模型:这里的N是new缩写,buffer缓冲区缓存数据减少等待时间,channel通道读取缓存区数据或向缓冲区写入数据配合buffer使用,selector多路复用器监听注册在其上的channel,收到channel上读或写事件信息,轮询channel,然后通过selectkey调用channel执行任务。
- AIO模型:通过监听和异步通道(异步文件通道和异步套接字通道)实现异步读写,减少了selector对通道的轮询,是一个事件驱动模型。
-
- 项目结构
一、HttpRequst执行流程图
理解:
1、HttpProcessor是HTTP protocol processor的缩写,它的作用就是给我们写的request设置默认参数(比如协议版本,是否保持连接等),一般我们写的HttpRequest只有url和数据,事实上,一个完整的请求不只有这两个数据,查看一下HTTP协议就知道一个请求需要很多数据了,而之所以我们不用写这些数据,是因为HttpCore或HttpClient帮我们完成了,而负责这部分功能的就是HttpProcessor。
2、HttpRequestExecutor 的作用就是调用HttpProcessor完善原始HttpRequest,根据请求参数使用HttpClientConnection执行HttpRequest并接受HttpResponse,以及设置HttpCoreContext参数。
3、HttpClientConnection获取方法有两种:1、自己新建conn绑定根据host新建的socket;2、新建connpool,根据host从pool中获取conn
4、HttpCoreContext:是为了完成会话功能,下边是官方注释:
* The primary purpose of the HTTP context is to facilitate information sharing
* among various logically related components. HTTP context can be used
* to store a processing state for one message or several consecutive messages.
* Multiple logically related messages can participate in a logical session
* if the same context is reused between consecutive messages.
二、HttpResponse的获取原理
三、HttpCore和HttpClient
- HttpComponents Core == HttpCore
- 实现了一系列的底层传输的功能
- 这些底层功能,可以用来去建立自己的client和server
- 支持两种I/O模式:
- 阻塞型Blocking:基于典型的Java的I/O模型
- 非阻塞型Non-Blocking:基于Java的NIO,事件驱动型
- BIO:Blocking IONIO和AIO的区别
- NIO:buffer、channel和selector
- AIO:事件驱动
- 在线文档:
- 示例代码:HttpCore Examples
- HttpComponents Client == HttpClient
- 兼容HTTP 1.1
- 基于HttpCore
- 意味着:导入对应的库HttpClient库时,也要导入相关的HttpCore的库
- 同时提供了其他功能:
- 客户端认证功能
- HTTP状态管理
- HTTP连接管理
- HttpClient是之前常用的那个:Commons HttpClient 3.x的继承者
- 之前的HttpClient 3.x,现已废弃
- 如果还要用之前的HttpClient 3.x,也强烈推荐你换用最新的HttpClient 4.1(或更新版本的)
- 在线文档:
- 示例代码:HttpClient Examples
- HttpClient还有个异步的版本:
四、参考文档