OKhttp相关

连接的复用: OkHttp 会在使用完连接后,将其保持在连接池中而不立即关闭。当下一次请求需要建立连接时,OkHttp 首先尝试从连接池中获取空闲的连接,而不是重新创建一个新的连接。这样可以节省握手和建立连接的时间开销,提高请求的效率。

最大连接数限制: 为了避免连接过多导致资源浪费,OkHttp 使用连接池来限制同时打开的连接数。这通过设置连接池的最大空闲连接数以及最大连接数来实现,超出这些限制的请求会等待连接可用为止。

连接的复用策略: OkHttp 使用一种智能的策略来管理连接的复用,在服务器支持的情况下,会尽可能地复用已经建立的连接,从而减少重复的连接建立和握手过程。

空闲连接的回收: 对于长时间空闲的连接,OkHttp 会根据连接池的设置进行回收,以保持连接池的健康状态,避免过多的空闲连接占用资源。

请求重试和失败处理: 在网络请求过程中,OkHttp 也会处理连接超时、请求重试等问题,以确保网络请求的稳定性。

补充:同一个服务器的最大连接数默认是5,最大的并发数是64,超过最大并发数的请求将会添加到等待队列中,okhttp会动态地根据系统负载来调整线程池的大小,这样做的目的是为了在不同的系统环境下都能保持良好的性能表现,后面新来的请求都会先添加到等待队列中,按照先进先出的原则执行,当请求的数量超过了线程池的最大处理能力和等待队列的容量时,可能会触发请求失败,返回给客户端某种类型的错误或者超时信息;连接池中最大的空闲链接数是5,如果30s没有新的请求复用链接的话将会关闭当前空闲链接,复用的链接是根据请求的IP和端口来寻找的且连接没有过期可以被重用,

判断连接是否过期的标准:

空闲时间: OkHttp 会根据连接的空闲时间来判断连接是否过期。当一个连接在连接池中空闲一段时间后,OkHttp 会检查这个连接的空闲时间是否超过了预先设定的阈值。如果超过了阈值,OkHttp 可能会认为这个连接已经过期,不再被重用,而是会关闭掉或者进行重新连接。

服务器响应的标头信息: 在 HTTP 协议中,服务器可以发送一个响应头(Response Header)来指示该连接可以被复用的时间。例如,服务器可以发送一个 Keep-Alive 头部,指示客户端可以在一定时间内重用这个连接。OkHttp 会根据这些头部信息来判断连接的有效期。

连接的健康状态: OkHttp 会检查连接的健康状态,例如连接是否已经关闭,是否已经建立了另一个连接,或者其他网络层面的问题,来决定是否继续重用这个连接。

一旦连接池中的连接被认为是过期的,OkHttp 将不会继续重用该连接,而会关闭它并重新建立一个新的连接。这种机制可以有效地避免使用已经失效的连接,保证了请求的可靠性和稳定性

拦截器:

1

应用拦截器和网络拦截器的区别在于:应用拦截器只会执行一次,网络拦截器会执行多次,所以我们的请求头数据、请求body数据、响应体日志等可以使用应用拦截器,而需要追踪网络请求过程的变化可以使用网络拦截器。

RetryAndFollowUpInterceptor

请求失败时的重试:当发起的网络请求由于网络问题或服务器错误而失败时,RetryAndFollowUpInterceptor 负责决定是否需要进行请求的重试。根据预先设定的条件,比如网络超时、连接失败等,它会根据策略判断是否需要尝试重新发送请求。

重定向:当服务器返回重定向响应时,RetryAndFollowUpInterceptor 会负责处理重定向操作,比如重新发起请求到重定向的目标地址。

请求跟进:在某些情况下,一个请求可能需要跟随另一个请求,比如在HTTP 301/302响应中进行跟随。RetryAndFollowUpInterceptor 会处理这种请求的跟进操作,确保请求能够达到目标服务器。

BridgeInterceptor

在客户端和服务器之间传输数据时进行桥接和转换。具体来说,它会处理从应用层到网络层的数据转换工作。

主要功能包括:

添加头信息:在请求发送到服务器之前,BridgeInterceptor 会负责添加必要的头信息(比如 User-Agent 等)以确保请求的正常发送。

请求转换:当一个请求发起时,BridgeInterceptor 可以负责将应用层的请求转换为可以发送到服务器的形式,包括请求方法、头信息等的转换工作。

响应转换:当从服务端接收到响应时,BridgeInterceptor 会将响应进行转换,确保它能够被应用层正常解析和处理。

CacheInterceptor

OkHttp使用响应中的Cache-Control头部信息来判断缓存是否过期。Cache-Control头部包含了各种指令,其中max-age指令表示了缓存的有效期。当OkHttp收到一个响应时,它会检查max-age指令并基于当前时间和服务器返回的响应时间计算出缓存的有效期。如果缓存过期了,OkHttp会向服务器发起新的请求,如果没有过期,OkHttp会使用缓存的响应数据。

除了max-age,Cache-Control头部中还包含其他指令,比如no-cache、no-store等,它们会影响缓存的行为。此外,响应中的Expires头部也可以提供一个缓存过期的时间点。OkHttp会根据max-age和Expires来判断缓存是否过期。

ConnectInterceptor

主要用于处理与连接、握手和协议切换相关的操作。具体来说,ConnectInterceptor 承担了以下主要功能:

建立连接:在发起一个请求时,ConnectInterceptor 负责创建与目标服务器的连接,在这个过程中可能涉及到 TLS 握手等操作。

协议切换:ConnectInterceptor 还负责处理在不同协议(如 HTTP/1.1、HTTP/2 等)之间的切换。

连接池管理:它还参与了连接池的管理,确保连接可以被复用,以提高请求的效率。

ConnectInterceptor 在整个请求链中起着重要的作用,它处理了底层网络连接的建立和管理,以确保请求可以顺利发送到服务器并获取响应。通过合理地使用 ConnectInterceptor,OkHttp 能够高效地处理网络连接,从而提升应用的性能和稳定性。

CallServerInterceptor

发送请求到服务器:拦截器负责将请求发送到目标服务器,并等待服务器的响应。

处理服务器响应:一旦接收到服务器的响应,拦截器会处理并返回响应数据,包括响应头和响应体等信息。

请求重定向:在服务器返回的响应中,如果有重定向的指令,拦截器也会处理相应的重定向操作。

传输压缩:拦截器还可能涉及解压缩响应数据,以便应用程序可以使用解压后的数据。

通过 CallServerInterceptor,OkHttp 能够有效地处理请求到服务器和服务器返回的响应的过程,确保网络请求的顺利执行并处理服务器的响应。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容