HttpClient源码解析系列:第一篇:总览
来源:互联网 发布:ubuntu lamp环境搭建 编辑:程序博客网 时间:2024/05/16 13:57
Http, tcp/ip和socket区别
Tcp/ip是传输层协议,而http则是建立在它之上的上层应用协议。Http聚焦在数据规范层面,tcp/ip则主要解决数据传输层面。建立在tcp/ip上的应用协议很多,像rpc,ftp等。
Socket则是tcp/ip的一个编程实现,封装了传输层的众多细节,从而让协议层可以关注协议本身的处理而不用关注底层传输。在程序里http请求(连接)最终一定需要绑定到一个具体的socket连接进行上行和下行传输。
关于Socket可以参考:http://blog.csdn.net/hguisu/article/details/7445768/ 【 Linux的SOCKET编程详解】
HttpClient(当前版本 4.5.3)
核心接口:HttpClient
全是执行方法,即传进来一个请求实例,然后执行拿到结果。
其实现类只有三个
其中AutoRetryHttpClient 和 DecompressingHttpClient 都被标记为 Deprecated ( Since 4.3 )。从 4.3 开始建议使用HttpClientBuilder(@since 4.3)。而主要使用的即使 CloseableHttpClient。
再看CloseableHttpClient,可以看到,也只有三个实现。
其中的 AbstractHttpClient 也被标记为 Deprecated(Since 4.3)。
而剩下的两个MinimalHttpClient 和 InternalHttpClient。其中 MinimalHttpClient 是一个极简版的实现,是核心设计的最直接简单的提现。而 InternalHttpClient 则是一个完全可配置版本,提供最丰富完善的功能。
HttpClients 是一个工厂类,专门生产各种HttpClient和Builder。而HttpClientBuilder用于生成 InternalHttpClient,让配置更加规范易用。
补充:
InternalHttpClient是一个非常有意思的类,它不是Public的,是 CloseableHttpClient 的一个实现,只能通过HttpClientBuilder来生成。而InternalHttpClient的生成过程又依赖了其他的多个非公开类,也就是说,InternalHttpClient 很难支持继承之后重写这样的定制开发方式(除非你把依赖的非公开类都拷贝出来)。这也算是充分利用Java特性维持对象的可控,这些核心的类本身,对于不是特别理解源码的人,直接继承修改,确实可能带来各种问题。
阅读全文
1 0
- HttpClient源码解析系列:第一篇:总览
- 第一篇 Oracle架构总览
- Spring源码学习系列第一篇
- Apktool源码解析——第一篇
- Apktool源码解析——第一篇
- Leveldb源码解析第一篇【Data Block】
- 第一篇 Oracle体系结构总览(整理)
- HttpClient源码解析系列:第二篇:极简版实现
- HttpClient源码解析系列:第五篇:HttpClientBuilder中的配置分析
- FACEBOOK SURROUND360 源码解析 第一篇 源码环境搭建
- libev源码解析——总览
- 浏览器开发系列第一篇:如何获取最新chromium源码
- 浏览器开发系列第一篇:如何获取最新chromium源码
- ORMLite系列---第一篇
- 任务驱动,Winform VS WEB对比式学习.NET开发系列第一篇------身份证解析(不断更新的WEB版本及Winform版本源码)
- Android-Async-HttpClient 源码解析
- HttpClient源码解析系列:第三篇:发送-接收的底层过程
- HttpClient源码解析系列:第四篇:Connection是怎么生成和管理的
- 内存对齐和位域
- 最小值和最大值(3n/2)
- python3 定制词云
- 自定义控件-轮播图的实现
- 五种经典排序算法的实现(冒泡、归并、快排、堆排序、希尔)
- HttpClient源码解析系列:第一篇:总览
- 游标
- Python 数据库连接
- 自编STM32轻量级操作系统(二)------任务调度
- js全选和全不选的代码
- iOS在Xcode中重命名项目名称
- 06.19 MySQL数据库含义与安装(初级)
- 5-2 排座位 (25分)
- Java实现爬取网页数据:PhantomJS+Webdriver