一、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 Tutorial
      • 中文版:HttpCore-Simplified Chinese.pdf
    • 示例代码: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 Tutorial
        • 中文版:HttpClient Tutorial Simplified Chinese
    • 示例代码:HttpClient Examples
    • HttpClient还有个异步的版本:
      • Asynch HttpClient

四、参考文档

https://blog.csdn.net/ty497122758/article/details/78979302

HttpCore和HttpClient相关推荐

  1. HttpClient模拟http请求

    最近工作中使用到了两个jar包 httpclient.jar, httpcore.jar HttpClient 的 abort(终止)程序示例 [java] view plaincopyprint? ...

  2. (4.2.47.1)HttpCore手机服务器

    背景知识 前言 HTTPCore范围 HTTPCore目标 HTTPCore不是什么 一.基础 1.1. HTTP messages 1.1.1.构造 1.1.2. 基本操作 1.1.2.1. HTT ...

  3. java httpclient 模拟登录

    新版HttpClient4.2与之前的3.x版本有了很大变化,建议从http://hc.apache.org/处以得到最新的信息. 关于HttpCore与HttpClient:HttpCore是位于H ...

  4. activemq 开启监听_ActiveMQ 消息监听 MessageListener 的使用

    刚学 ActiveMQ, 最开始搭建环境的时候引入的jar 包,几个核心的jar jms.jar, httpcore.jar , httpclient.jar, activemq-all.jar 准备 ...

  5. Java RESTful API集成测试

    这篇文章将重点介绍为RESTful API(带有JSON有效负载)编写Java集成测试的基本原理和机制. 目的是对技术进行介绍,并为基本正确性编写一些测试. 这些示例将使用最新版本的GitHub RE ...

  6. java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy 错误解决办法

    前天,在调第三方SDK开发的时候,报了一个错误为java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy,下面来说下产生这个的 ...

  7. 微服务设计指导-使用云原生微服务解决传统海量跑批时引起的系统间“级联雪崩”以及效率

    问题描述 这也是一起真实的生产事故,如下图所示 这种"雪崩"是属于企业内部系统雪崩. 我们都知道如果是在外部http (包括一切restful.soap请求.http类型调用)调用 ...

  8. 盘点 35 个 Apache 顶级项目,我拜服了…

    原文 盘点 35 个 Apache顶级项目 文章目录 Apache 软件基金会 顶级开源项目 基础组件项目 1.Apache(httpd) 2.Tomcat 3.Commons 4.POI 5.Htt ...

  9. 网易云信短信接口java,调用网易云短信验证码接口Demo

    最近在开发新的项目,因为需要使用验证码验证这个功能.我选择的是 网易云 的验证码接口.免费使用20条.并且在正式使用的过程中,对比了很多家以后,感觉还是他家的便宜.因为随着你购买的短信包数量的增加,价 ...

最新文章

  1. 自然语言处理NLP基本知识小结
  2. 总结接口与类和抽象类的关系
  3. Nginx —— 用HTTP核心模块配置一个静态的Web服务器
  4. Unity FixedUpdate 与 Update 的线程关系实验
  5. linux 相关的问题
  6. hive最新UDF函数(2016-10-25)
  7. 由MySql漏洞导致电脑被入侵(特征为新增加名为piress的帐户)
  8. 【软件质量】修正瑞士军刀枚举类
  9. 当Spring 容器初始化完成后执行某个方法
  10. Win10 下Visual Studio 2017源码编译Paddle
  11. javascript获取元素样式值
  12. 荒岛余生最后一个包裹_你会为一个排球哭泣吗?电影《荒岛余生》
  13. 百度手机输入法中的五笔9键盘有问题?
  14. 手机版wps支持格式
  15. Github渗透测试工具库
  16. 数独解法Java实现
  17. Unity功能记录(七)------ UGUI获取UI在Canvas下的坐标/根据UI位置获取屏幕图片/二维码识别
  18. [云原生专题-23]:K8S - Kubernetes(K8S)整体概述与组件架构通俗讲解
  19. android跑马灯效果不起作用,Android实现跑马灯效果的方法
  20. BigDecimal取余运算

热门文章

  1. android仿微信图片编辑库,Android仿微信图片选择器
  2. java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z
  3. React Native 每日一学(Learn a little every day)
  4. Proteus内部编程仿真STM32(附程序)
  5. 用python画五角星、填充不了颜色_python的turtle画五角星内部不能填充的解决办法...
  6. 「卷无人道」,手机app定制
  7. 如何避免浏览器缓存。
  8. 如何在 Mac 上录制屏幕
  9. Android Push哪家强——分析豌豆荚1400个APP
  10. MYSQL 基础篇(补)