谷歌浏览器的源码分析 31
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
上一次说到通过管道把接收到的HTTP数据通知另一个线程处理,它不是直接发送数据过去,而是把数据在共享内存里的句柄发送过去,达到高效通讯的目的。下面就来分析资源处理进程里,接收到这个消息之后,做些什么处理。这个消息的处理代码如下:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
#001 void ResourceDispatcher::OnReceivedData(int request_id,
#002 SharedMemoryHandle shm_handle,
#003 int data_len) {
#004 // Acknowlegde the reception of this data.
回应这个消息,说已经收到数据了。
#005 IPC::Message::Sender* sender = message_sender();
#006 if (sender)
#007 sender->Send(
#008 new ViewHostMsg_DataReceived_ACK(MSG_ROUTING_NONE, request_id));
#009
#010 DCHECK((shm_handle && data_len > 0) || (!shm_handle && !data_len));
打开共享内存文件,使用只读的方式。
#011 SharedMemory shared_mem(shm_handle, true); // read only
#012
查找到请求下载的资源的请求标识号。
#013 PendingRequestList::iterator it = pending_requests_.find(request_id);
如果没有找到相应的请求标识号,就直接返回,不用处理这些数据。
#014 if (it == pending_requests_.end()) {
#015 // this might happen for kill()ed requests on the webkit end, so perhaps
#016 // it shouldn't be a warning...
#017 DLOG(WARNING) << "Got data for a nonexistant or finished request";
#018 return;
#019 }
#020
这里找到相应的请求标识号,就把数据放到请求信息里处理。
#021 PendingRequestInfo& request_info = it->second;
#022
#023 if (data_len > 0 && shared_mem.Map(data_len)) {
#024 RESOURCE_LOG("Dispatching " << data_len << " bytes for " <<
#025 request_info.peer->GetURLForDebugging());
#026 const char* data = static_cast<char*>(shared_mem.memory());
#027 request_info.peer->OnReceivedData(data, data_len);
#028 }
#029 }
上面这个函数实现接收到HTTP数据,并且把数据放到请求的缓冲区里,但它没有知道什么时候接收数据完成,显然有另外一个消息来做这些的工作,就是下面类ResourceDispatcherHost的函数:
#001 bool OnResponseCompleted(int request_id, const URLRequestStatus& status) {
#002 receiver_->Send(new ViewMsg_Resource_RequestComplete(
#003 routing_id_, request_id, status));
#004
#005 // If we still have a read buffer, then see about caching it for later...
#006 if (spare_read_buffer_) {
#007 read_buffer_.reset();
#008 } else if (read_buffer_.get() && read_buffer_->memory()) {
#009 spare_read_buffer_ = read_buffer_.release();
#010 }
#011 return true;
#012 }
这个函数里通过发送消息ViewMsg_Resource_RequestComplete来通知资源进程已经把网络的数据接收完成了,可以进入下一步处理。然后在资源进程里就会处理这个消息,下一次再来分析这方面的代码。
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
谷歌浏览器的源码分析 31相关推荐
- 谷歌浏览器的源码分析 13
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 上一次说 ...
- 谷歌chrome浏览器的源码分析(四)
上一次说到需要调用这个OpenURLFromTab函数,那么这个函数是做什么的呢?从名称上可能猜到它是打开网页,但是是从目前TAB页里打开呢?还是新建一个?或者使用每个TAB页一个进程呢?这些疑惑,只 ...
- JDK源码分析 NIO实现
总列表:http://hg.openjdk.java.net/ 小版本:http://hg.openjdk.java.net/jdk8u jdk:http://hg.openjdk.java.net/ ...
- ConcurrentHashMap实现原理及源码分析
ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对HashMap的实现原理还不甚了解,可参考我的另一篇文章HashMap实现原理及源码分析),Con ...
- Python3.5源码分析-内存管理
Python3源码分析 本文环境python3.5.2. 参考书籍<<Python源码剖析>> python官网 Python3的内存管理概述 python提供了对内存的垃圾收 ...
- tornado源码分析
tornado源码分析 本源码为tornado1.0版本 源码附带例子helloworld import tornado.httpserver import tornado.ioloop import ...
- 基于JDK1.8---HashMap源码分析
基于JDK1.8-HashMap源码简要分析 HashMap继承关系 HashMap:根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不 ...
- Java源码详解四:String源码分析--openjdk java 11源码
文章目录 注释 类的继承 数据的存储 构造函数 charAt函数 equals函数 hashCode函数 indexOf函数 intern函数 本系列是Java详解,专栏地址:Java源码分析 Str ...
- Spring Cloud源码分析(二)Ribbon(续)
因文章长度限制,故分为两篇.上一篇:<Spring Cloud源码分析(二)Ribbon> 负载均衡策略 通过上一篇对Ribbon的源码解读,我们已经对Ribbon实现的负载均衡器以及其中 ...
最新文章
- Python IDE ——Anaconda+PyCharm的安装与配置
- (iOS-基本知识)int long NSInteger 入门与兼容问题讲解
- 安卓8.1 字体 ——现在6.0,7.0,8.0都可以体验
- Android初级第一讲---Android开发环境的配置
- 重磅!win10无法安装.NET Framework 3.5服务解决办法(附离线安装包下载)
- 2016 博客导读总结 amp; 个人感悟
- 疑似iPhone 13 mini原型机曝光:后置相机模组排布方式变化
- Windows Terminal v0.7 发布:支持分屏、重排选项卡和改进 UI
- windows c++ 服务 当前用户提权_windows xp 提权
- redis linux工具安装,linux 安装redis缓存工具
- Java String substring()方法示例
- 【Oracle学习笔记】索引
- Emotet***病毒升级,对抗杀毒软件的能力再次增强
- 360急速浏览器有道词典屏幕取词问题
- PHP+Swoole 搭建 Websocket 聊天室
- matplotlib绘制鼠标的十字光标(自定义方式,官方实例)
- Java内存监控程序_java内存监控工具及命令
- 4种Word文档解除密码保护的方法
- 文本标注工具-brat安装
- 情人节有哪些礼物可以送给男朋友的,情人节送礼推荐
热门文章
- 半导体激光器基础知识学习计划
- mysql数据库repair_MySQL数据库中的REPAIR TABLE语法介绍
- android dts配置_Android 4.0系统支持DTS音效_华为手机_手机Android频道-中关村在线
- 人工智能,深度学习,机器学习平台,界面UI
- 单片机系列(2)流水灯程序是如何写入单片机的
- VM下安装雪豹Mac OS系统
- weex解决scrollView嵌套webview高度问题,安卓自定义weex组件webview,
- 一周企业财报 | 安踏、易车、药明康德、贝塔斯曼等23家企业发布业绩
- K近邻法算法(KNN)及其R实现
- 温度传感器php,温度传感器基础知识介绍