Chrome网络库的请求处理
ResourceLoaderAndroid::start
->WebUrlLoader::start (或者 clientAndroid->webFrame()->startLoadingResource)
->WebUrlLoaderClient::start
创建一个网络线程来处理请求
->thread->message_loop()->PostTask(FROM_HERE, NewRunnableMethod(m_request.get(), &WebRequest::start));
---------------------------------------------------------------------------------
网络线程
->WebRequest::start
->net::URLRequest::start
根据URL类型创建不同的Job,并启动URLRequestXXXXJob::Start
【Http】
->URLRequestHttpJob::Start
->AddExtraHeaders()
->取Cookie
->创建HttpCacheTransaction
HttpCacheTransaction
->启动事务HttpCache::Transaction::Start
->循环Doloop() 状态机
do {
switch (state) {
DoGetBackend();
DoGetBackendComplete(rv);
DoSendRequest();
DoSendRequestComplete(rv);
DoSuccessfulSendRequest();
DoNetworkRead();
DoNetworkReadComplete(rv);
DoInitEntry();
DoOpenEntry();
DoOpenEntryComplete(rv);
DoCreateEntry();
DoCreateEntryComplete(rv);
DoDoomEntry();
DoDoomEntryComplete(rv);
DoAddToEntry();
DoAddToEntryComplete(rv);
DoNotifyBeforeSendHeaders();
DoNotifyBeforeSendHeadersComplete(rv);
DoStartPartialCacheValidation();
DoCompletePartialCacheValidation(rv);
DoUpdateCachedResponse();
DoUpdateCachedResponseComplete(rv);
DoOverwriteCachedResponse();
DoTruncateCachedData();
DoTruncateCachedDataComplete(rv);
DoTruncateCachedMetadata();
DoTruncateCachedMetadataComplete(rv);
DoPartialHeadersReceived();
DoCacheReadResponse();
DoCacheReadResponseComplete(rv);
DoCacheWriteResponse();
DoCacheWriteTruncatedResponse();
DoCacheWriteResponseComplete(rv);
DoCacheReadMetadata();
DoCacheReadMetadataComplete(rv);
DoCacheQueryData();
DoCacheQueryDataComplete(rv);
DoCacheReadData();
DoCacheReadDataComplete(rv);
DoCacheWriteData(rv);
DoCacheWriteDataComplete(rv);
}
} while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE);
->创建HttpNeworkTransaction (HttpCacheTransaction::DoSendRequest)
HttpNeworkTransaction
->启动事务HttpNetworkTransaction::Start
->循环DoLoop() 状态机
do {
switch (state) {
DoCreateStream();
DoCreateStreamComplete(rv);
DoInitStream();
DoInitStreamComplete(rv);
DoGenerateProxyAuthToken();
DoGenerateProxyAuthTokenComplete(rv);
DoGenerateServerAuthToken();
DoGenerateServerAuthTokenComplete(rv);
DoBuildRequest();
DoBuildRequestComplete(rv);
DoSendRequest(); Socket阻塞发送
DoSendRequestComplete(rv);
DoReadHeaders(); Socket阻塞读取
DoReadHeadersComplete(rv);
DoReadBody(); Socket阻塞读取
DoReadBodyComplete(rv);
DoDrainBodyForAuthRestart();
DoDrainBodyForAuthRestartComplete(rv);
}
} while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE);
【Ftp】
Chrome网络库的请求处理相关推荐
- Android网络库的比较:OkHTTP,Retrofit和Volley [关闭]
本文翻译自:Comparison of Android networking libraries: OkHTTP, Retrofit, and Volley [closed] Two-part que ...
- 谷歌开源张量网络库TensorNetwork,GPU处理提升100倍!
编译 | 琥珀 出品 | AI科技大本营(ID:rgznai100) 世界上许多最严峻的科学挑战,如开发高温超导体和理解时空的本质,都涉及处理量子系统的复杂性.然而,这些系统中量子态的数量程指数级增 ...
- 新书预告:《Linux 多线程服务端编程——使用 muduo C++ 网络库》
看完了 W. Richard Stevens 的传世经典<UNIX 网络编程>, 能照着例子用 Sockets API 编写 echo 服务, 却仍然对稍微复杂一点的网络编程任务感到无从下 ...
- kotlin 用协程做网络请求_Android使用Kotlin协程封装网络库
概述 最近又要替换网络库成了,导致所有的业务代码都要替换且要重新测试回归.为了防止后续再遇到这样事情,降低替换核心库的成本,现利用协程对网络库进行封装. 理想API调用方式 launch { val ...
- 开源免费的C/C++网络库(c/c++ sockets library)
(1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨平台. http://www.cs.wustl.edu/~schmidt/ACE.html (2)Asio Asio基于Boo ...
- 网易云音乐网络库跨平台化实践
导读: 2021年10月21日,「QCon 全球软件开发大会」在上海举办,网易智企技术 VP 陈功作为出品人发起了「AI 时代下的融合通信技术」专场,邀请到网易云信.网易音视频实验室.网易云音乐的技术 ...
- 技术实践 | 聊聊网易云信的信令网络库实践
导读:信令作为实时音视频技术架构中的重要一环,是对建立实时音视频通信起到关键桥梁性的作用. 文|丁永锋 网易云信资深客户端开发工程师 本文将从信令的概念着手,分享在网易云信新一代音视频技术架构下,信令 ...
- 如何使用网络库实现应用级消息收发
为什么80%的码农都做不了架构师?>>> 网络客户端ISocketClient和网络会话ISocketSession都继承了ISocketRemoteISocketRemote ...
- muduo网络库学习(八)事件驱动循环线程池EventLoopThreadPool
muduo是支持多线程的网络库,在muduo网络库学习(七)用于创建服务器的类TcpServer中也提及了TcpServer中有一个事件驱动循环线程池,线程池中存在大量线程,每个线程运行一个Event ...
最新文章
- linux 系统调用表 sys_call_table 获取方法
- [原]请留心asp:Image控件中的ImageUrl属性
- java继承的关键字_超级关键字在Java继承中的作用
- VTK:可视化算法之TensorAxes
- DWZ (JUI) 教程 navTab 刷新分析
- Application package 'AndroidManifest.xml' must have a minimum of 2 segments错误
- [剑指offer][JAVA]面试题第[09]题[用两个栈实现队列][LinkedList]
- 【BZOJ2038】小Z的袜子,第一次的莫队算法
- 解决Hash冲突四种方法
- Android7工程模式,安卓手机的“工程模式”是什么?
- new relic_Datadog,SignalFX,New Relic,Wavefront –您应该选择哪个仪表板?
- Luogu1039 侦探推理
- 记一次mysql启动失败问题.
- Android Zip 解压与进度 实现,kotlin命令行输入值
- python安装需要什么电脑配置_自学python用什么配置电脑?
- 市场“不确定性”中的投资逻辑 2020-03-18
- exFAT和NTFS哪个好
- 【Linux】Linux下安装gcc/g++
- ScroolView 控制最大高度
- springboot+ldap+Jpa