浏览器中完美运行的代码,一到OkHttp里就歇菜?

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的连接方式
    非持久连接
    持久连接

在这里插入图片描述

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网络编程指南》,可点击下方卡片免费领取

猜你喜欢

转载自blog.csdn.net/m0_59614665/article/details/124414090