OkHttp的原理看着并不复杂,但在实际工作中,很多人还是会经常遇到一些问题无处下手:
在浏览器中一切正常
通过OkHttp却无法实现了,这又是怎么一回事呢?
由于在开发中最常使用的HTTP与HTTPS协议,都能借助框架轻松完成,这导致很多程序员在网络编程方面非常薄弱。看看下面这些问题,你能答上几个?
- addInterceptor与addNetworkInterceptor有什么区别?
- 网络缓存如何实现的?
- 网络连接怎么实现复用?
- OkHttp如何做网络监控?
- 用过哪些网络加载库?Retrofit核心实现原理?
- 如果让你实现Retrofit的某些核心功能,你会考虑怎么去实现?
- Retrofit的注解是怎么解析的?
- Retrofit网络请求层用的什么?
- Retrofit中使用了哪些设计模式?
- Retrofit在OkHttp上做了哪些封装?动态代理和静态代理的区别,是怎么实现的?
- Android开发Repository层如何拿到retrofit返回的数据?
这些问题是不是看着都很熟悉,但答起来却捉襟见肘,不得要领?底层原理的生疏,成为了很多人通往高阶Android的绊脚石。这里给大家分享一份《2022网络编程指南》,里面从基础的网络协议到高工最爱的OkHttp+Retrofit,都有非常详尽的原理解析(文末有惊喜)。
网络编程全解析
全篇目录如下:
5层协议体系结构
将计算机网络分层结构进行一个分层简单的介绍,将本文的大纲展示给各位。
本章内容:
- 各层作用
- 数据封装与解封装
TCP、UDP协议
本章内容:
- TCP
主要特点
TCP连接管理
TCP连接的三次握手
TCP释放连接的四次挥手
TCP可靠传输 - UDP
- HTTP的连接方式
非持久连接
持久连接
扫描二维码关注公众号,回复:
14217892 查看本文章
TCP/IP 协议简介
- IP
- TCP
第五章:跟 TCP/IP 学协议设计
- 协议版本如何升级?
- 如何发送不定长数据的数据包
- 上传多个文件,只有所有文件都上传成功时才算成功
- 如何保证数据的有序性
- 如何保证对方收到了消息
Socket
- Socket 基本用法
- Socket、ServerSocket 傻傻分不清楚
- Socket 长连接的实现
Web Socket
- WebSocket 握手
- 客户端的简单示例
- 客户端 API
- 构造函数
WebSocket
webSocket.readyState
webSocket.onopen
webSocket.onclose
webSocket.onmessage
webSocket.send()
webSocket.bufferedAmount
webSocket.onerror - WebSocket 服务器
Volley
- Volley简介
- 下载Volley
- StringRequest的用法
- JsonRequest的用法
- 使用Volley加载网络图片
- ImageRequest的用法
ImageLoader的用法 - NetworkImageView的用法
- 定制自己的Request
自定义XMLRequest
自定义GsonRequest - Volley源码解读
OkHttp
- 使用方法
- 基本对象介绍
OkHttpClient
Request
Call
RealCall
AsyncCall
Dispatcher
小结 - 流程分析
同步请求
异步请求
获取Response
Interceptor
RealInterceptorChain - 拦截器
client.interceptors
RetryAndFollowUpInterceptor
BridgeInterceptor
CacheInterceptor
ConnectInterceptor
client.networkInterceptors
CallServerInterceptor - 总结
- 反思
设计模式
线程安全
数据结构
Retrofit使用
- Retrofit入门
创建Retrofit实例
接口定义
接口调用 - Retrofit注解详解
第一类:HTTP请求方法
第二类:标记类
第三类:参数类 - Gson与Converter
- RxJava与CallAdapter
- 自定义Converter
- 自定义CallAdapter
- 其它说明
Retrofit.Builder
Retrofit的Url组合规则
Retrofit提供的Converter
Retrofit提供的CallAdapter:
Retrofit原理
- 什么是动态代理?
- 源码解析
loadServiceMethod(method)
invoke(args)
CallAdapted
Converter - Retrofit是如何将子线程切换到主线程?
- Retrofit为什么要使用动态代理?
- 总结
Retrofit面试
- 使用方法
- 流程解析
构建 Retrofit 实例
构建 API 接口实例
执行请求,解析响应 - 为什么要引入CallAdapter与Converter?
- CallAdapter 是如何工作的?
添加
匹配
工作 - Converter 是如何工作的?
添加
匹配
工作 - 说说使用到了哪些设计模式
动态代理模式
为什么要使用动态代理来获取API方法?
策略模式
适配器模式
工厂方法模式
建造者模式 - 使用过程中踩过什么坑?
- 总结
Netty之搭建服务端与客户端
- 简单的介绍一下Netty
- 创建Tcp服务端
- 创建客户端,与创建服务端差不多一至
- 先启动服务端 再启动客户端,这样就可以建立起连接了
Netty之Encoder、Decoder、Handler 的使用
- Encoder的作用
- Decoder的作用
- Handler的作用
- 示例
- 运行
Netty之心跳处理、断线重连
- 客户端添加心跳处理
- 修改
- 断线重连处理
Netty之粘包、拆包,处理
- 什么粘包呢?
- 一般处理粘包的手段
- 示例
首先给服务端添加DelimiterBasedFrameDecoder
添加$符号
我们写个连续发送数据包的代码 - 同步
- 效果展示
Netty之创建Web服务、作为HTTP服务器
- 创建Http服务
- 在HttpServerHandler中处理收到的HTTP请求
- 响应HTTP请求
- 示例
- 上面使用到的测试接口地址
- 运行效果
如需这份《2022网络编程指南》,可点击下方卡片免费领取