官方的解释 “Cronet is the networking stack of Chromium put into a library for use on mobile. This is the same networking stack that is used in the Chrome browser by over a billion people. It offers an easy-to-use, high performance, standards-compliant, and secure way to perform HTTP requests. Cronet has support for both Android and iOS. On Android, Cronet offers its own Java asynchronous API as well as support for the java.net.HttpURLConnection API. This document gives a brief introduction to using these two Java APIs.“

参考:https://chromium.googlesource.com/chromium/src/+/master/components/cronet/README.md?autodive=0%2F%2F

可以概况为下面几个方面:

  • Cronet 是一个对 Chromium 的网络模块的封装库
  • 支持 android/iOS 移动平台(目前在 windows 平台也有使用)
  • 可以无缝对接到各个平台的常见网络库同时也拥有自己的 API
  • 支持 HTTP 协议,同时支持 QUIC 协议

Chromium 网络模块

Chromium 网络协议栈提供了几个优势来改善页面加载时间。

每次主机建立连接时,都要进行各种活动,比如 DNS 解析和握手。Chromium 协议栈使用 Socket Late Binding 机制来解决这个问题。

Socket Late Binding:网络请求总是当 Socket 准备好发送数据时才与一个 TCP 连接关连起来,所以首先有机会做到对请求有效分级(prioritization),比如,在 socket 连接过程中可能会到达一个更高优先级的请求。同时也可以有更好的吞吐率(throughput),比如,在连接打开过程中,去复用一个刚好可用的 socket, 就可以使用到一个完全可用的 TCP 连接。其实传统的 TCP pre-connect(预连接)及其它大量的优化方法也是这个效果。

现代页面需要大量的资源,而资源优先级是浏览器的一个难题。Chromium 协议栈使用了资源优先级,所有的请求都会以优先级标记发送给服务器,让服务器按照适当的优先级顺序进行响应。

Chromium 还提供了一个磁盘缓存来缓存网络资源。

其他 cronet 功能

在读写数据时,Cronet 使用 JAVA NIO ByteBuffers,为 I/O 功能提供了更好的性能。

作为 Chromium 网络栈,Cronet 也允许设置请求的优先级。

支持 HTTP/2 和 QUIC

使用 Cronet 的优势之一是支持 HTTP/2 和 QUIC。

HTTP/2 通过进化标准,解决了目前 HTTP 的许多弊端。相对于其前身,HTTP/2。

  • 是二进制的,而不是文本的
  • 是完全多路复用的,而不是有序的和阻塞的:这允许使用一个连接做并行请求
  • 使用头压缩来减少开销
  • 允许服务器主动将响应 "推送 "到客户端缓存中。

QUIC 协议(Quick UDP Internet Connections)是谷歌在 2012 年宣布的,旨在用 UDP 代替 TCP 取代 HTTP/2。

QUIC 允许以更低的延迟创建连接,是一个没有线头阻塞的多路复用协议。这意味着它解决了数据包丢失的问题,只阻断单个数据流,而不是所有的数据流。

桌面和 Android Chrome 浏览器上的所有主要 Google 网站以及许多 Android 应用程序都使用了 QUIC。

性能测试报告显示,网页加载时间快了 5%,网页搜索速度快了1 秒,达到 99%。YouTube 是使用 QUIC 的地方之一,它报告说,通过减少 30% 的重音(视频暂停)数量,提高了体验质量。

使用 cronet 的原因可以简单的总结为

  • 是对 Chromium 网络堆栈的封装,对 Android 来说,无疑是最佳选择(Chrome 浏览器每天都在使用这个栈)
  • cronet 利用多种技术来减少延迟并提高应用正常运行所需的网络请求吞吐量
  • cronet 支持 HTTPS/SPDY/QUIC 等协议,尤其是 QUIC,QUIC 现已提为 HTTP/3,而 QUIC 也是谷歌出品的,使用全家桶无疑稳定性得到了保证

也有更深层次的讨论,

比如,.

  • 支持比较全面的网络状态监控,包括 http/tcp rtt、吞吐量、信号强度、系统网络状态变化。
  • 基本支持上述的终端优化。

终端优化

  1. DNS 优化。包括接入大厂的 HTTP(S)DNS,访问最近的 DNS 服务器;内置 DNS 服务 IP 列表;缓存 DNS;依次并发多 DNS 请求,取最快的一个(腾讯 mars 复合连接策略)。
  2. 预连接/连接复用。包括 Http/TCP 的 keep-alive,减少 Http/TCP 建立连接的耗时。
  3. 多级缓存。Http Cache、应用层 Cache。
  4. 请求优先级。合理调度并发数量。
  5. HTTPS SSL session 持久化以及复用。减少 SSL 握手时间。

参考:https://zhuanlan.zhihu.com/p/93406051

相关文章:


待研究:

  1. 惊!提速 30%!腾讯TQUIC 网络传输协议
  2. 通过某音Cronet模块学习Quic协议

cronet 的简单学习的更多相关文章

  1. Log4j简单学习笔记

    log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...

  2. shiro简单学习的简单总结

    权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...

  3. CentOS 简单学习 firewalld的使用

    1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...

  4. Windows 下 Docker 的简单学习使用过程之一 dockertoolbox

    1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...

  5. 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习

    嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...

  6. Linux——帮助命令简单学习笔记

    Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...

  7. OI数学 简单学习笔记

    基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...

  8. mongodb,redis简单学习

     2.mongodb安装配置简单学习                   配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作                 ...

  9. html css的简单学习(三)

    html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...=========================== ...

  10. html css的简单学习(二)

    html css的简单学习(二) <!Doctype html>告诉浏览器,这是一个html文档.lang="en" 默认是en,表示英语:zh-Hans 中文简体:z ...

随机推荐

  1. [转帖]TiDB 整体架构

    https://docs.pingcap.com/zh/tidb/stable/tidb-architecture 与传统的单机数据库相比,TiDB 具有以下优势: 纯分布式架构,拥有良好的扩展性,支 ...

  2. 【转帖】JVM 内存模型与垃圾回收

    文章目录 1. JVM内存模型 1.1. 程序计数器 (线程私有) 1.2. Java 虚拟机栈 (线程私有) 1.3. 本地方法栈 (线程私有) 1.4. Java 堆 (线程共享) 1.5. 方法 ...

  3. [转帖]tar、gzip、zip、jar是什么,怎么查看?

    https://www.cnblogs.com/codelogs/p/16702759.html   原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 如果你是后 ...

  4. Core 文件的简单学习

    背景 最近公司内经常出现jvm进程宕机的情况. 宕机之后没有产生jvm的dump文件.比如xxx.hprof 但是产生了 core.$pid的文件. 曾经在aarch64架构上宕机时曾经想学习一下co ...

  5. Linux的free命令与OOM的简单总结

    简介 查看操作系统配置最关键的几个命令是 lscpu 查看CPU信息 以及free 查看内存信息. 不过free信息有一个疑惑点 他的 free的值可能很小. 会让搭建产生误解. 这里简单说明一下. ...

  6. HTTPD 搭建正向代理 使无网络访问权限的服务器能够访问互联网服务的快捷办法

    背景 公司有保密要求比较高,数据安全要求比较高的企业客户,要求核心业务服务器部允许直接访问互联网,但是因为我们有一些OCR识别以及发票查验等的场景需要连接云端的服务才可以正常使用, 所以这里面就存在安 ...

  7. 最佳实践:基于vite3的monorepo前端工程搭建

    一.技术栈选择 1.代码库管理方式-Monorepo: 将多个项目存放在同一个代码库中 选择理由1:多个应用(可以按业务线产品粒度划分)在同一个repo管理,便于统一管理代码规范.共享工作流 选择理由 ...

  8. 【贪心】AGC018C Coins

    Problem Link 现在有 \(X+Y+Z\) 个人,第 \(i\) 个人有三个权值 \(a_i,b_i,c_i\),现在要求依次选出 \(X\) 个人,\(Y\) 个人和 \(Z\) 个人(一 ...

  9. MySQL查询语句(1)

    连接数据库 mysql -hlocalhost -uroot -proot DQL-介绍 DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录 ...

  10. vue3新特性

    值得注意的新特性 1==> 组合式 API 2==> Teleport 3==> 片段 4==> 触发组件选项 5==> createRenderer API 来自 @v ...