这篇博客侧重于了解OkHttp的网络部分,包括Socket的创建.连接,连接池等要点.OkHttp对Socket的流操作使用了Okio进行了封装,本篇博客不做介绍,想了解的朋友可以参考拆轮子系列:拆Okio. OkHttp中关于网络的几个概念 下面的主要翻译自OkHttp的官方文档,查看原文. URL URLs(比如https://github.com/square/okhttp)是HTTP和网络的基础,不止指定了Web上的资源,还指定了如何获取该资源. Address Address(比如gi…
本篇文章主要介绍OkHttp执行同步和异步请求的大体流程.主要流程如下图: 主要分析到getResponseWidthInterceptorChain方法,该方法为具体的根据请求获取响应部分,留着后面的博客再介绍. Dispatcher类 Dispatcher类负责异步任务的请求策略.首先看它的部分定义: public final class Dispatcher { private int maxRequests = 64; private int maxRequestsPerHost = 5…
首先先看一张流程图,该图是从拆轮子系列:拆 OkHttp 中盗来的,如下: 在上一篇博客深入理解OkHttp源码(一)——提交请求中介绍到了getResponseWithInterceptorChain()方法,本篇主要从这儿继续往下讲解. getResponseWithInterceptorChain方法 private Response getResponseWithInterceptorChain() throws IOException { // Build a full stack o…
http://frodoking.github.io/2015/03/12/android-okhttp/ Android为我们提供了两种HTTP交互的方式:HttpURLConnection 和 Apache HTTP Client,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池,已足够满足我们各种HTTP请求的需求.但更高效的使用HTTP可以让您的应用运行更快.更节省流量.而OkHttp库就是为此而生. OkHttp是一个高效的HTTP库: 支持 SPDY ,共享同一个…
前言 说到源码,很多朋友都觉得复杂,难理解. 但是,如果是一个结构清晰且完全解耦的优质源码库呢? OkHttp就是这样一个存在,对于这个原生网络框架,想必大家也看过很多很多相关的源码解析了. 它的源码好看,易读,清晰,所以今天我准备从设计模式的角度再来读一遍 OkHttp的源码. 主要内容就分为两类: okhttp的基本运作流程 涉及到的设计模式 (本文源码版本为okhttp:4.9.0,拦截器会放到下期再讲) 使用 读源码,首先就要从它的使用方法开始: val okHttpClient = O…
转自:http://www.open-open.com/lib/view/open1472216742720.html https://blog.piasy.com/2016/07/11/Understand-OkHttp/ OkHttp官网地址:http://square.github.io/okhttp/OkHttp GitHub地址:https://github.com/square/okhttp 本文是 Piasy 原创,发表于 https://blog.piasy.com,请阅读原文支…
Okhttp源码分析--基本使用流程分析 一. 使用 同步请求 OkHttpClient okHttpClient=new OkHttpClient(); Request request=new Request.Builder() .get() .url("www.baidu.com") .build(); Call call =okHttpClient.newCall(request).execute(); 异步请求 OkHttpClient okHttpClient=new OkH…
AQS源码三视-JUC系列 前两篇文章介绍了AQS的核心同步机制,使用CHL同步队列实现线程等待和唤醒,一个int值记录资源量.为上层各式各样的同步器实现画好了模版,像已经介绍到的ReentrantLock,Semaphroe,CountDownLatch都是在模版基础上实现的.花里胡哨,万变不离其宗. 以下是第三部分的内容,尝试写完Condition部分,基本结束AQS源码的学习,不过还是围绕着一个队列(条件队列)来进行的. Tips 在第一篇文章中介绍Node类的nextWaiter字段的时…
摘要 本文构建了一个使用工作量证明机制(POW)的类BTC的区块链.将区块链持久化到一个Bolt数据库中,然后会提供一个简单的命令行接口,用来完成一些与区块链的交互操作.这篇文章目的是希望帮助大家理解BTC源码的架构,所以主要专注于的实现原理及存储上,暂时忽略了 “分布式” 这个部分.严格来说还不能算是一个完全意义上的区块链系统. 开发环境 语言:GO; 数据库:BoltDB; IDE: Goland或其他工具都可以; 系统:不限,本文使用windows. BoltDB数据库 实际上,选择任何一…
Spring之深入理解AOP源码 ​ 在上一篇博文中,我们对AOP有了初步的了解,那么接下来我们就对AOP的实现原理进行深入的分析. ​ 在之前写的那个AOP示例代码当中有这样一个注解:@EnableAspectJAutoProxy,这个注解的作用是开启AOP功能,所以我们就从这个注解引入对AOP源码的分析. @EnableAspectJAutoProxy ​ 先来看一下它的源代码: @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUN…