cronet 的简单学习
官方的解释 “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、吞吐量、信号强度、系统网络状态变化。
- 基本支持上述的终端优化。
终端优化
- DNS 优化。包括接入大厂的 HTTP(S)DNS,访问最近的 DNS 服务器;内置 DNS 服务 IP 列表;缓存 DNS;依次并发多 DNS 请求,取最快的一个(腾讯 mars 复合连接策略)。
- 预连接/连接复用。包括 Http/TCP 的 keep-alive,减少 Http/TCP 建立连接的耗时。
- 多级缓存。Http Cache、应用层 Cache。
- 请求优先级。合理调度并发数量。
- HTTPS SSL session 持久化以及复用。减少 SSL 握手时间。
参考:https://zhuanlan.zhihu.com/p/93406051
相关文章:
待研究:
cronet 的简单学习的更多相关文章
- Log4j简单学习笔记
log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...
- shiro简单学习的简单总结
权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...
- CentOS 简单学习 firewalld的使用
1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...
- Windows 下 Docker 的简单学习使用过程之一 dockertoolbox
1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...
- 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习
嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...
- Linux——帮助命令简单学习笔记
Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...
- OI数学 简单学习笔记
基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...
- mongodb,redis简单学习
2.mongodb安装配置简单学习 配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作 ...
- html css的简单学习(三)
html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...=========================== ...
- html css的简单学习(二)
html css的简单学习(二) <!Doctype html>告诉浏览器,这是一个html文档.lang="en" 默认是en,表示英语:zh-Hans 中文简体:z ...
随机推荐
- Numa以及其他内存参数等对Oracle的影响
Numa以及其他内存参数等对Oracle的影响 背景知识: Numa的理解 Numa 分一致性内存访问结构 主要是对应UMA 一致性内存访问而言的. 在最初一个服务器只有一个CPU的场景下, 都是UM ...
- [转帖]Docker资源(CPU/内存/磁盘IO/GPU)限制与分配指南
https://zhuanlan.zhihu.com/p/417472115 什么是cgroup? cgroups其名称源自控制组群(control groups)的简写,是Linux内核的一个功能, ...
- 【转帖】【笔记】python连接神通数据库
https://www.cnblogs.com/wyongbo/p/17054924.html python连接国产神州通用数据库. 一.准备 下载whl及dll: 链接: https://pan.b ...
- Oracle使用临时表与直接关联的性能比较
Oracle使用临时表与直接关联的性能比较 摘要 自己的数据库水平还是太low了. 之前有很多店理解过. 但是一直理解的不深入. 比如我们这边有很多使用临时表存储中间结果数据 然后对结果数据进行关联查 ...
- [转帖]讨论在 Linux Control Groups 中运行 Java 应用程序的暂停问题原创
https://heapdump.cn/article/1930426 说明 本篇原文来自 LinkedIn 的 Zhenyun Zhuang,原文:Application Pauses When R ...
- nginx 企业版与开源版本的区别
- open,os模块的常用函数
一.open用于读写文件 1.open的基本语法 : open(file,mode,buffering,encoding,errors.........),open中有如下几个参数,一般情况 下我们只 ...
- vs不同版本支持的c++版本和PlatformToolset,及在vs中切换c++版本
找c++资料从网上找确实更快速,但要想深入地理解vc++建议看msdn文档. vs不同版本支持的c++版本 C++17: vs2017基本支持,vs2015部分支持. C++14: vs2017就可以 ...
- C#对象属性浅拷贝和深拷贝
对象属性和字段拷贝的几种方式 微软提供了浅拷贝 对于值类型,修改拷贝的值不会影响源对象 对于引用类型,修改拷贝后的值会影响源对象,但string特殊,它会拷贝一个副本,互相不会影响 自己实现深拷贝,我 ...
- 从零开始配置vim(26)——LSP UI 美化
之前我们通过几个实例演示如何配置其他语言的lsp服务,相信各位小伙伴碰到其他的编程语言也能熟练的配置它对应的lsp服务.本篇讲作为一个补充,我们来优化一下LSP 相关的显示 配置 UI 原始的 lsp ...