干货-okHttp的优点-收藏了 小浣熊干脆面收藏卡系列广告优点是什么
suiw9 2024-10-29 16:41 36 浏览 0 评论
OkHttp 相较于其它的实现有以下的优点.
支持SPDY,允许连接同一主机的所有请求分享一个socket。 如果SPDY不可用,会使用连接池减少请求延迟。 使用GZIP压缩下载内容,且压缩操作对用户是透明的。 利用响应缓存来避免重复的网络请求。 当网络出现问题的时候,OKHttp会依然有效,它将从常见的连接问题当中恢复。 如果你的服务端有多个IP地址,当第一个地址连接失败时,OKHttp会尝试连接其他的地址,这对IPV4和IPV6以及寄宿在多个数据中心的服务而言,是非常有必要的。
因此使用 OkHttp 作为替代是好的选择.
1.框架重写请求
当您向okhttp提供一个请求时,为了正确性和效率,okhttp将重写您的请求。
okhttp可能从原始请求添加头文件,包括内容长度,传输编码、代理、内容类型等。如果有cookie将添加一个cookie头。
有些请求会有缓存响应,如果已过期,okhttp可以执行条件更新响应。
2.跟踪请求
当您请求的URL已移动是,web服务器将返回类似302以指示文档的新URL的相应代码。okhttp将遵循重定向检索最终响应。
3.重试请求
如果有不同路线,okhttp将请求不同的路线。
4.Call被执行的两种方法
1.同步:你的线程会阻止,直到响应返回
2.异步:你对请求可以进行排队,并且响应回来对另一线程进行调用。Call可以从任何线程被取消。如果未完成将会失败会抛出io异常。
虽然你只提供了URL,但okhttp计划连接你的服务器使用三种类型:URL、地址、路线。
1.URL
2.地址
3.路线
4.Connections
当您请求一个 URL 的 OkHttp 时,这里做了些什么:
1.它使用 URL 和配置 OkHttpClient 来创建一个地址。此地址指定如何我们会连接到 web 服务器。
2.它尝试检索与该地址的连接,从连接池中。
3.如果它不在池中查找连接,它选择一条路线尝试。这通常意味着制作一个 DNS 请求以获取服务器的 IP 地址。如有必要,它然后选择 TLS 版本和代理服务器。
4.如果它是一个新的路线,它连接通过建立一个直接套接字连接,TLS 隧道 (为 HTTPS 通过 HTTP 代理服务器) 或直接的 TLS 连接。它作为必要的 TLS 握手。
5.它会发送 HTTP 请求,并读取响应。
6.如果有连接问题,OkHttp 会选择另一条路线,然后再试。这允许 OkHttp 恢复时的服务器地址的子集是遥不可及。它也是有用的当连接池是陈旧或未遂的 TLS 版本不受支持。
7.一旦收到了响应,连接将返回池,所以它可以重用一个未来的请求。连接被逐出池后的非活动时间。
二.原生态使用方法
同步获取(Synchronous Get)
下载文件,打印头文件,并以字符串形式打印其响应体。
响应体string()方法对小文件,方便快捷。但如果响应体大(大于1 MIB),避免string()因为它会加载整个文件到内存中。在这种情况下,更倾向于将身体作为一个流来处理。
异步获取
在一个工作线程上下载文件,并在响应时调用返回。该回调是在响应头准备好后进行的。读取响应体可块。okhttp目前不提供异步API部分接收响应体。
取消Calls
使用Call.cancel()立即停止正在进行的请求。如果一个线程正在写请求或阅读的反应,它会收到IOException。用这个来保护网络的电话时,不再是必要的;例如当用户导航离开应用程序。同步和异步调用都可以取消。
本文出自微信公众号mjw-java,更多内容请关注或访问网站www.moliying.com
相关推荐
- 5款Syslog集中系统日志常用工具对比推荐
-
一、为何要集中管理Syslog?Syslog由Linux/Unix系统及其他网络设备生成,广泛分布于整个网络。因其包含关键信息,可用于识别网络中的恶意活动,所以必须对其进行持续监控。将Sys...
- 跨平台、多数据库支持的开源数据库管理工具——DBeaver
-
简介今天给大家推荐一个开源的数据库管理工具——DBeaver。它支持多种数据库系统,包括Mysql、Oracle、PostgreSQL、SLQLite、SQLServer等。DBeaver的界面友好...
- 强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)
-
NavicatPremium,一款集数据迁移、数据库管理、SQL/查询编辑、智能设计、高效协作于一体的全能数据库开发工具。无论你是MySQL、MariaDB、MongoDB、SQLServer、O...
- 3 年 Java 程序员还玩不转 MongoDB,网友:失望
-
一、什么场景使用MongoDB?...
- 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南
-
作为一名在NoSQL丛林中披荆斩棘的数据猎人,没有比GUI工具更称手的瑞士军刀了。本文将带你围观五款主流MongoDB管理神器的特性与暗坑,附赠精准到扎心的吐槽指南一、MongoDBCompass:...
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
-
前言最近在做neo4j相关的同步处理,因为产线的可视化工具短暂不可用,发现写起来各种脚本非常麻烦。...
- solidworks使用心得,纯干货!建议大家收藏
-
SolidWorks常见问题...
- 统一规约-关乎数字化的真正实现(规范统一性)
-
尽管数字化转型的浪潮如此深入人心,但是,对于OPCUA和TSN的了解却又甚少,这难免让人质疑其可实现性,因为,如果缺乏统一的语义互操作规范,以及更为具有广泛适用的网络与通信,则数字化实际上几乎难以具...
- Elasticsearch节点角色配置详解(Node)
-
本篇文章将介绍如下内容:节点角色简介...
- 产前母婴用品分享 篇一:我的母婴购物清单及单品推荐
-
作者:DaisyH8746在张大妈上已经混迹很久了,有事没事看看“什么值得买”已渐渐成了一种生活习惯,然而却从来没有想过自己要写篇文章发布上来,直到由于我产前功课做得“太过认真”(认真到都有点过了,...
- 比任何人都光彩照人的假期!水润、紧致的肌肤护理程序
-
图片来源:谜尚愉快的假期临近了。身心振奋的休假季节。但是不能因为这种心情而失去珍贵的东西,那就是皮肤健康。炙热的阳光和强烈的紫外线是使我们皮肤老化的主犯。因此,如果怀着快乐的心情对皮肤置之不理,就会使...
- Arm发布Armv9边缘AI计算平台,支持运行超10亿参数端侧AI模型
-
中关村在线2月27日消息,Arm正式发布Armv9边缘人工智能(AI)计算平台。据悉,该平台以全新的ArmCortex-A320CPU和领先的边缘AI加速器ArmEthos-U85NPU为核心...
- 柔性——面向大规模定制生产的数字化实现的基本特征
-
大规模定制生产模式的核心是柔性,尤其是体现在其对定制的要求方面。既然是定制,并且是大规模的定制,对于制造系统的柔性以及借助于数字化手段实现的柔性,就提出了更高的要求。面向大规模定制生产的数字化业务管控...
- 创建PLC内部标准——企业前进的道路
-
作者:FrankBurger...
- 标准化编程之 ----------- 西门子LPMLV30测试总结
-
PackML乃是由OMAC开发且被ISA所采用的自动化标准TR88.00.02,能够更为便捷地传输与检索一致的机器数据。PackML的主要宗旨在于于整个工厂车间倡导通用的“外观和感觉”,...
你 发表评论:
欢迎- 一周热门
-
-
Linux:Ubuntu22.04上安装python3.11,简单易上手
-
宝马阿布达比分公司推出独特M4升级套件,整套升级约在20万
-
MATLAB中图片保存的五种方法(一)(matlab中保存图片命令)
-
别再傻傻搞不清楚Workstation Player和Workstation Pro的区别了
-
Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
-
如何提取、修改、强刷A卡bios a卡刷bios工具
-
Element Plus 的 Dialog 组件实现点击遮罩层不关闭对话框
-
日本组合“岚”将于2020年12月31日停止团体活动
-
SpringCloud OpenFeign 使用 okhttp 发送 HTTP 请求与 HTTP/2 探索
-
tinymce 号称富文本编辑器世界第一,大家同意么?
-
- 最近发表
-
- 5款Syslog集中系统日志常用工具对比推荐
- 跨平台、多数据库支持的开源数据库管理工具——DBeaver
- 强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)
- 3 年 Java 程序员还玩不转 MongoDB,网友:失望
- 拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南
- mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
- solidworks使用心得,纯干货!建议大家收藏
- 统一规约-关乎数字化的真正实现(规范统一性)
- Elasticsearch节点角色配置详解(Node)
- 产前母婴用品分享 篇一:我的母婴购物清单及单品推荐
- 标签列表
-
- dialog.js (57)
- importnew (44)
- windows93网页版 (44)
- yii2框架的优缺点 (45)
- tinyeditor (45)
- qt5.5 (60)
- windowsserver2016镜像下载 (52)
- okhttputils (51)
- android-gif-drawable (53)
- 时间轴插件 (56)
- docker systemd (65)
- slider.js (47)
- android webview缓存 (46)
- pagination.js (59)
- loadjs (62)
- openssl1.0.2 (48)
- velocity模板引擎 (48)
- pcre library (47)
- zabbix微信报警脚本 (63)
- jnetpcap (49)
- pdfrenderer (43)
- fastutil (48)
- uinavigationcontroller (53)
- bitbucket.org (44)
- python websocket-client (47)