首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在okhttp3中对http2.0和异步使用相同的TCP连接?

在okhttp3中,可以通过使用HTTP/2协议和异步请求来共享相同的TCP连接。HTTP/2是一种新的网络协议,它允许多个请求和响应在同一个TCP连接上进行并发传输,从而提高网络性能。

要在okhttp3中实现这一点,可以按照以下步骤进行操作:

  1. 首先,确保你的okhttp3版本支持HTTP/2协议。从okhttp3版本3.5.0开始,它默认支持HTTP/2。你可以在项目的build.gradle文件中添加以下依赖项来使用最新版本的okhttp3:
代码语言:txt
复制
implementation 'com.squareup.okhttp3:okhttp:最新版本号'
  1. 创建一个OkHttpClient实例,并启用HTTP/2支持。可以通过调用protocols()方法来指定支持的协议版本,将其设置为Collections.singletonList(Protocol.HTTP_2)即可。例如:
代码语言:txt
复制
OkHttpClient client = new OkHttpClient.Builder()
        .protocols(Collections.singletonList(Protocol.HTTP_2))
        .build();
  1. 确保你的请求是异步的。在okhttp3中,默认情况下,请求是异步执行的。你可以使用enqueue()方法来发送异步请求。例如:
代码语言:txt
复制
Request request = new Request.Builder()
        .url("http://example.com")
        .build();

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        // 处理响应
    }

    @Override
    public void onFailure(Call call, IOException e) {
        // 处理失败
    }
});

通过以上步骤,你可以在okhttp3中同时使用HTTP/2和异步请求,并共享相同的TCP连接。这样可以提高网络性能,减少连接建立的开销。

关于okhttp3的更多信息和使用示例,你可以参考腾讯云的相关产品介绍链接地址:okhttp3产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Http2.0

●性能大幅提升 2.0协议重点是终端用户感知延迟、网络及服务器资源使用等性能优化。...在二进制分帧层上,http2.0会将所有传输信息分割为更小消息帧,并它们采用二进制格式编码将其封装,新增二进制分帧层同时也能够保证http各种动词,方法,首部都不受影响,兼容上一代http标准...对于相同数据,不再通过每次请求和响应发送,通信期间几乎不会改变通用键-值(用户代理、可接受媒体类型,等等)只需发送一次。...http/2使用是专门为首部压缩而设计HPACK②算法。 image.png 从上图可以看到http1.X不支持首部压缩,而http2.0压缩算法效果最好,发送接受数据量都是最少。...因为现在所有的压力集中在底层一个TCP连接之上,TCP很可能就是下一个性能瓶颈,比如TCP分组队首阻塞问题,单个TCP packet丢失导致整个连接阻塞,无法逃避,此时所有消息都会受到影响。

99350

Spring Cloud OkHttp设计原理

Okhttp3设计原理 本章节将详细介绍OkHttp3底层设计原理,并结合设计原理,总结在使用过程应当注意事项。...Response,将数据基于Http协议解析转换 Stream 这一层是okio高性能层进行io转换处理,聚焦于Source Sink处理 Address okhttp3于调用服务地址封装...OKHttp3网络连接过程,涉及到几种概念: 请求URL:OKHttp3 是处理URL请求HTTP请求基础,URL格式遵循标准HTTP协议。...3.5 连接工作原理 ? 在OKHttp3内部使用了双端队列管理连接池,也就是说 连接池没有数量限制。 那既连接数量限制,OKHttp3是怎么保证队列内存不溢出呢?...3.5.2 连接使用注意事项: 对于瞬时并发很高情况下,okhttp连接池中TCP/IP连接将会冲很高,可能并发数量基本一致。

1.4K30
  • WEB性能--HTTP 2.0介绍

    以下是HTTP2.0宣言草稿,这份宣言明确了该协议范围关键设计要求: 相对于使用TCPHTTP1.1,用户在大多数情况下感知延迟要有实质上、可度量改进; 解决HTTP“队首阻塞”问题;...相应地,很多流可以并行在同一个TCP连接上交换消息。 4.3 多向请求与响应 在HTTP1.x,如果客户端想发送多个并行请求以及改进性能,那么必须使用多个TCP连接。...总之,HTTP2.0二进制分帧机制解决了HTTP1.x存在队首阻塞问题,也消除了并行处理发送请求及响应时多个连接依赖。结果就是应用速度更快、开发更简单、部署成本更低。...浏览器在渲染页面时,并非所有资源都具有相同优先级:HTML文档本身构建DOM不可或缺,CSS构建CSSOM不可或缺,而DOMCSSOM构建都可能会受到JavaScript资源阻塞,其他资源(...HTTP2.0在客户端和服务器端使用“首部表”来跟踪存储之前发送键值,对于相同数据,不再通过每次请求和响应发送; 首部表在HTTP2.0连接存续期内始终存在,有客户端和服务器共同更新; 每个新首部键值要么被追加到当前表末尾

    92130

    Android网络优化方案

    一个Http请求在建立Tcp连接过程,肯定会产生一次DNS,那么我们是不是可以通过内存缓存方式,通过一个HashMap持有这个HostIP,当下次发起Tcp连接时候,我们就可以用直接用内存这个...长连接,HTTP 1.1支持长连接(PersistentConnection)请求流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立关闭连接消耗延迟...header压缩,如上文中所言,前面提到过HTTP1.xheader带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输header大小,通讯双方各自cache一份header...HTTP2.0多路复用HTTP1.X连接复用有什么区别?...你可以定义数据结构,然后使用特殊生成源代码轻松在各种数据流中使用各种语言进行编写读取结构数据。你甚至可以更新数据结构,而不破坏由旧数据结构编译已部署程序。

    1.1K20

    你想要系列:网络请求框架OkHttp3全解系列 - (四)拦截器详解2:连接、请求服务(重点)

    http1.0 HTTP1.1 在HTTP1.1,解决了HTTP1.0连接不能复用问题,支持持久连接——使用keep-alive机制:一次HTTP请求结束后不会立即断开TCP连接,如果此时有新HTTP...请求,且其请求Host同上次请求相同,那么会直接复用TCP连接。...(keep-alive不会永久保持连接,它有一个保持时间,可在不同服务器软件(Apache)设定这个时间) ?...http1.1 HTTP2.0 HTTP1.1连接复用是串行:一个请求建立了TCP连接,请求完成后,下一个相同host请求继续使用这个连接。...其中Http2ExchangeCodec是使用Http2.0 数据帧 概念完成请求响应读写。

    2.1K30

    图解 HTTP 前世今生!

    二进制协议将通信数据分解为更小帧,数据帧充斥在C/S之间双向数据流,就像双向多车道高速路,来往织川流不息: 要理解二进制分帧层需要知道四个概念: 链接Link 就是指一条C/S之间TCP链接...2.3 多路复用 1.1版本存在队首阻塞问题,因此如果客户端要发起多个并行请求来提升性能,必须使用多个TCP连接,这样就要承受更大延时建链拆链成本,不能有效利用TCP链接。...,在本已经拥挤链路多次传输相同数据部分确实不是高效做法。...C.HPACK算法 2.0版本HPACK算法在C/S中使用首部表来存储之前发送键值,对于相同数据通信期间几乎不会改变通用键值只需发送一次即可。...为了保证数据安全,上述生成密钥K只会生成使用1次,后续服务端会按照相同规则生成一套全新公钥私钥,并使用这组公私钥生成新密钥M。

    82420

    【知识点】OkHttp 原理 8 连问

    OKHttp拦截器是如何工作? 应用拦截器网络拦截器有什么区别? OKHttp如何复用TCP连接? OKHttp空闲连接如何清除? OKHttp有哪些优点?...分发器主要作用是维护请求队列与线程池,比如我们有100个异步请求,肯定不能把它们同时请求,而是应该把它们排队分个类,分为正在请求列表正在等待列表, 等请求完成后,即可从等待列表取出等待请求...,即多个Http请求复用一个TCP连接,OKHttp也做了相应优化,下面我们来看下OKHttp是怎么复用TCP连接 ConnectInterceptor查找连接代码会最终会调用到ExchangeFinder.findConnection...此时为了确保Http2.0连接多路复用性,会第三次从连接池匹配。因为新建立连接握手过程是非线程安全,所以此时可能连接池新存入了相同连接。...责任链模式: OKHttp核心就是责任链模式,通过5个默认拦截器构成责任链完成请求配置 享元模式: 享元模式核心即池中复用,OKHttp复用TCP连接时用到了连接池,同时在异步请求也用到了线程池

    75551

    【腾讯经验】闪现社区App网络优化

    OkHttp3如果没有做深度定制,在高并发弱网环境下性能一般;NSURLSessionDataTask是一个黑盒子,无法深度改造定制。...层,External层为第三方基础网络组件库,比如引入TQuic SDKCurl,编译成静态库使用;Core层则是TQuicCurl封装,封装成对应UrlConnection实现;Engine...层则是网络框架,提供了同步接口异步接口调用、线程池管理、调度器、请求策略、降级、缓存等一系列功能,主要供业务方直接使用。...[image.png] Lighting内部实现参考了OkHttp3责任链模式,所有的网络请求通过一系列拦截器来实现: [image.png] 通过责任链模式,可以解耦请求过程各个阶段,并且允许外部自定义拦截器进行控制...主要优势在于(相比Http): 减少握手次数,TCP本身需要三次握手,TLS1.1需要3次,TLS1.2,需要1-2次,TLS1.3才能达到0RTT,而QUIC协议层只需要1-2 RTT,而再次连接

    2.4K72

    再谈HTTP2性能提升之背后原理—HTTP2历史解剖

    除了long-polling相同难点之外,streaming还有几个缺陷: 有些代理服务器会等待服务器response结束之后才会将结果推送到请求客户端。...在二进制分帧层, HTTP/2 会将所有传输信息分割为更小消息帧(frame),并它们采用二进制格式编码 ,其中 HTTP1.x 首部信息会被封装到 HEADER frame,而相应 Request...又比如TCP在建立连接初期有慢启动(slow start)特性,所以连接重用总是比新建连接性能要好。 下图总结了不同浏览器该限制数目。...重置连接表现更好 很多app客户端都有取消图片下载功能场景,对于http1.x来说,是通过设置tcp segment里reset flag来通知端关闭连接。...更安全SSL HTTP2.0使用了tls拓展ALPN来做协议升级,除此之外加密这块还有一个改动,HTTP2.0tls安全性做了近一步加强,通过黑名单机制禁用了几百种不再安全加密算法,一些加密算法可能还在被继续使用

    1.8K51

    workman swoole 区别

    Swoole 使用纯 C 语言编写,提供了 PHP 语言异步多线程服务器,异步 TCP/UDP 网络客户端,异步 MySQL,异步 Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,...除了异步 IO 支持之外,Swoole 为 PHP 多进程模式设计了多个并发数据结构IPC通信机制,可以大大简化多进程并发编程工作。...支持TCP连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步Redis、异步Http、MQTT物联网客户端、异步消息队列等众多高性能组件。...Workerman支持特性 纯PHP开发,多进程支持,支持php7,支持hhvm 支持TCP/UDP,单机可支持数百万以上TCP连接 支持分布式部署,集群能支持数百万甚至更高并发TCP连接 支持libevent...master worker模型说明: master进程为主进程,启动过程读取conf配置,根据每个应用配置ip端口创建监听socket,然后再根据配置进程数创建对应数量子进程即

    1.6K30

    面试官又双叒叕“突袭”:如何优化一个网络请求?Android网络多个优化方案帮你解决

    一个Http请求在建立Tcp连接过程,肯定会产生一次DNS,那么我们是不是可以通过内存缓存方式,通过一个HashMap持有这个HostIP,当下次发起Tcp连接时候,我们就可以用直接用内存这个...长连接,HTTP 1.1支持长连接(PersistentConnection)请求流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立关闭连接消耗延迟...header压缩,如上文中所言,前面提到过HTTP1.xheader带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输header大小,通讯双方各自cache一份header...HTTP2.0多路复用HTTP1.X连接复用有什么区别?...参考数据深入理解OkHttp3:(七)事件(Events) image.png 基于OKHttp提供EventListener,我们就可以对于一个请求发起到最后各个节点进行监控,之后上报日志数据,这样在后续撕逼过程

    1.8K30

    2020-08-31:描述HTTP版本之间区别,主要是1.01.12.0三个版本区别。

    HTTP1.1与HTTP2.0主要区别 1.多路复用 HTTP1.1:可以多建立几个TCP连接,来支持处理更多并发请求,但是创建TCP连接本身也是有开销。...HTTP2.0使用了多路复用技术,做到同一个连接并发处理多个请求,而且并发请求数量比HTTP1.1大了好几个数量级。...TCP连接有一个预热和保护过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发连接,服务器响应就会变慢。...HTTP2.0:应用层(HTTP/2)传输层(TCP or UDP)之间增加一个二进制分帧层。 3.首部压缩 HTTP1.1:不支持header数据压缩。...HTTP2.0使用HPACK算法header数据进行压缩,这样数据体积小了,在网络上传输就会更快。

    67510

    HTTP第二弹——HTTP前世今生大比较

    1)缓存处理:在HTTP1.0主要使用header里If-Modified-Since,Expires来做为缓存判断标准; 2)带宽优化及网络连接使用:HTTP1.0,存在一些浪费带宽现象,...; 3)错误通知管理:在HTTP1.1新增了24个错误状态响应码,409(Conflict)表示请求资源与资源的当前状态发生冲突;410(Gone)表示服务器上某个资源被永久性删除。...5)长连接:HTTP 1.1支持长连接(PersistentConnection)请求流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立关闭连接消耗延迟...header压缩,如上文中所言,前面提到过HTTP1.xheader带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输header大小,通讯双方各自cache一份header...相同点 大多数情况下,HTTP HTTPS 是相同,因为都是采用同一个基础协议,作为 HTTP 或 HTTPS 客户端——浏览器,设立一个连接到 Web 服务器指定端口。

    37320

    计算机网络经典20问!

    在互联网应用层协议很多,域名系统DNS、HTTP协议、SMTP协议等。 传输层:负责向两台主机进程之间通信提供数据传输服务。传输层协议主要有传输控制协议TCP用户数据协议UDP。...每一条TCP连接只能是点到点;UDP支持一一、一多、多通信方式。 TCP首部开销20字节;UDP首部开销小,只有8个字节。 HTTP协议特点? HTTP允许传输任意类型数据。...HTTP1.0HTTP1.1区别? 长连接:HTTP1.0默认使用连接,每次请求都需要建立新TCP连接连接不能复用。...并且HTTP2.0在客户端和服务器端记录了之前发送键值,对于相同数据,不会重复发送。比如请求a发送了所有的头信息字段,请求b则只需要发送差异数据,这样可以减少冗余数据,降低开销。...什么是对称加密非对称加密? 对称加密:通信双方使用相同密钥进行加密。特点是加密速度快,但是缺点是密钥泄露会导致密文数据被破解。常见对称加密有AESDES算法。

    58710

    图解 | 为什么 HTTP 3.0 使用 UDP 协议

    2.HTTP2.0HTTP3.0 科技永不止步。 我们都知道互联网业务是不断迭代前进,像HTTP这种重要网络协议也是如此,新版本是旧版本扬弃。...QUIC提高了当前正在使用TCP面向连接Web应用程序性能。它在两个端点之间使用用户数据报协议(UDP)建立多个复用连接来实现此目的。...3.3 首次连接非首次连接 使用QUIC协议客户端和服务端要使用1RTT进行密钥交换,使用交换算法是DH(Diffie-Hellman)迪菲-赫尔曼算法。...为了保证数据安全,上述生成密钥K只会生成使用1次,后续服务端会按照相同规则生成一套全新公钥私钥,并使用这组公私钥生成新密钥M。...其中腾讯云QUIC协议表现了很大兴趣,并做了一些优化然后在一些重点产品连接迁移、QUIC成功率、弱网环境耗时等进行了实验,给出了来自生产环境诸多宝贵数据。

    1.9K10

    如何设计真正高性能高并发分布式系统(万字长文)

    http2.0支持真正连接。 长连接会对服务端耗费更多资源,上百万用户,每个用户独占一个连接服务端压力多大,成本多高。IM、push应用会使用连接,但是会做很多优化工作。...由于https需要加解密运算等,最好使用http2.0(强制ssl),传输性能很好。但是服务端需要维持更多连接。 6、关于并发连接与并发量 并发连接数:=活跃连接数+非活跃连接数。...跟活跃连接数没有绝对关系。网络服务器能并行处理业务请求数。 rt响应时间:各类操作单机rt肯定不相同。比如:从cache读数据分布式事务写数据库,资源消耗不同,操作时间本身就不同。...b服务器处理请求。 网络应用应该考虑平衡a+cb,处理这些连接能力 与 能管理连接请求达到平衡。...而我们平时在编程、函数接口调用过程,除了超时以外,都会返回一个结果。同步异步调用按照以下区分: 如果返回结果是最终结果,就是同步调用,:调用数据查询sql。

    2.2K20

    HTTP1.0、HTTP1.1HTTP2.0区别

    三、HTTP1.0HTTP1.1一些区别 HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单网页上网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在各大浏览器网络请求...长连接,HTTP 1.1支持长连接(PersistentConnection)请求流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立关闭连接消耗延迟...header压缩,如上文中所言,前面提到过HTTP1.xheader带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输header大小,通讯双方各自cache一份header...十、附注 HTTP2.0多路复用HTTP1.X连接复用有什么区别?...HTTP/2 通过让所有数据流共用同一个连接,可以更有效地使用 TCP 连接,让高带宽也能真正服务于 HTTP 性能提升。

    81130

    【大厂面试】腾讯面试,你真的懂HTTP吗?

    大彬:HTTP长连接,指的是复用TCP连接。多个HTTP请求可以复用同一个TCP连接,这就节省了TCP连接建立断开消耗。 大彬:HTTP1.0默认使用是短连接。...要使用连接,客户端和服务器HTTP首部Connection都要设置为keep-alive,才能支持长连接。...面试官:嗯,刚刚有提到HTTP1.0HTTP1.1,那你知道HTTP1.1 HTTP2.0区别吗?...并且HTTP2.0在客户端和服务器端记录了之前发送键值,对于相同数据,不会重复发送。比如请求a发送了所有的头信息字段,请求b则只需要发送差异数据,这样可以减少冗余数据,降低开销。...大彬:客户端使用证书认证机构CA公开发布RSA公钥该证书进行验证。 大彬:验证通过之后,浏览器和服务器通过密钥交换算法产生共享对称密钥。 大彬:开始传输数据,使用同一个对称密钥来加解密。

    35600

    计算机网络经典20问!

    TCP有哪些特点? TCPUDP区别? HTTP协议特点? HTTP报文格式 HTTP状态码有哪些? HTTP1.0HTTP1.1区别? HTTP1.1 HTTP2.0区别?...在互联网应用层协议很多,域名系统DNS、HTTP协议、SMTP协议等。 传输层:负责向两台主机进程之间通信提供数据传输服务。传输层协议主要有传输控制协议TCP用户数据协议UDP。...每一条TCP连接只能是点到点;UDP支持一一、一多、多通信方式。 TCP首部开销20字节;UDP首部开销小,只有8个字节。 HTTP协议特点? HTTP允许传输任意类型数据。...并且HTTP2.0在客户端和服务器端记录了之前发送键值,对于相同数据,不会重复发送。比如请求a发送了所有的头信息字段,请求b则只需要发送差异数据,这样可以减少冗余数据,降低开销。...什么是对称加密非对称加密? 对称加密:通信双方使用相同密钥进行加密。特点是加密速度快,但是缺点是密钥泄露会导致密文数据被破解。常见对称加密有AESDES算法。

    31611

    HTTP1.0、HTTP1.1 、HTTP2.0HTTP3.0 区别【面试题】

    1 请你说一下HTTP1.0、HTTP1.1 HTTP2.0HTTP3.0 区别 1.1 HTTP1.0 HTTP/1.0仅定义了16种状态码 HTTP1.0默认是短连接,即每个HTTP请求都要使用...TCP协议通过三次握手四次挥手实现,每次建立TCP连接是十分消耗资源。...在HTTP1.1新增了24个错误状态响应码,409(Conflict)表示请求资源与资源的当前状态发生冲突;410(Gone)表示服务器上某个资源被永久性删除。 Host头处理。...HTTP2.0使用了多路复用技术,做到同一个连接并发处理多个请求,而且并发请求数量比HTTP1.1大了好几个数量级。既然大家同时共用TCP连接,那么怎么区分不同请求呢?...基于TCP协议,由于切换网络之后,IP会改变,因而之前连接不可能继续保持。而基于UDPQUIC协议,则可以内建与TCP不同连接标识方法,从而在网络完成切换之后,恢复之前与服务器连接

    45110
    领券