亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

谷歌瀏覽器的源碼分析(20)

系統 1825 0
?

上一次介紹到把網頁連接地址生成一個消息通過 IPC 機制把消息發送出去,那么 IPC 的通訊機制是怎么樣的呢?又是發送給誰呢?

由于這個瀏覽器是使用多進程的架構來工作的,所以進程之間就需要相互交流,這種交流是就是通訊,可以從源碼里看到它是使用 IPC 的機制來通訊,實際采用的技術,就是 Windows 的命名管道的方式??梢钥吹竭@段代碼:

#001 ? bool Channel::CreatePipe(const wstring& channel_id, Mode mode) {

#002 ??? DCHECK(pipe_ == INVALID_HANDLE_VALUE);

#003 ??? const wstring pipe_name = PipeName(channel_id);

#004 ??? if (mode == MODE_SERVER) {

#005 ????? SECURITY_ATTRIBUTES security_attributes = {0};

#006 ????? security_attributes.bInheritHandle = FALSE;

#007 ????? security_attributes.nLength = sizeof(SECURITY_ATTRIBUTES);

#008 ????? if (!win_util::GetLogonSessionOnlyDACL(

#009 ????????? reinterpret_cast<SECURITY_DESCRIPTOR**>(

#010 ????????????? &security_attributes.lpSecurityDescriptor))) {

#011 ??????? NOTREACHED();

#012 ????? }

#013 ?

#014 ????? pipe_ = CreateNamedPipeW(pipe_name.c_str(),

#015 ?????????????????????????????? PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED |

#016 ????????????????????????????????? FILE_FLAG_FIRST_PIPE_INSTANCE,

#017 ?????????????????????????????? PIPE_TYPE_BYTE | PIPE_READMODE_BYTE,

#018 ??? ??????????????????????????? 1, ???????? // number of pipe instances

#019 ?????????????????????????????? BUF_SIZE, ? // output buffer size (XXX tune)

#020 ?????????????????????????????? BUF_SIZE, ? // input buffer size (XXX tune)

#021 ?????????????????????????????? 5000, ????? // timeout in milliseconds (XXX tune)

#022 ?????????????????????????????? &security_attributes);

#023 ????? LocalFree(security_attributes.lpSecurityDescriptor);

#024 ??? } else {

#025 ????? pipe_ = CreateFileW(pipe_name.c_str(),

#026 ????????????????????????? GENERIC_READ | GENERIC_WRITE,

#027 ????????????????????????? 0,

#028 ????????????????????????? NULL,

#029 ????????????????????????? OPEN_EXISTING,

#030 ????????????????????????? SECURITY_SQOS_PRESENT | SECURITY_IDENTIFICATION |

#031 ????????????????????????????? FILE_FLAG_OVERLAPPED,

#032 ????????????????????????? NULL);

#033 ??? }

?

上面這段代碼通過 WINDOWS API 函數 CreateNamedPipeW 函數來創建命名管道的服務器端,而通過 WINDOWS API 函數 CreateFileW 來打開客戶端,這樣兩個進程之間就建立起來通訊的管道,兩個進程之間的消息就可以相互發送了。

?

在瀏覽網頁連接的消息,就是通過 IPC 的機制,讓類 RenderProcessHost 把消息發送出去,那么這個消息是誰在另一端接收的呢?按照 IPC 的機制可知是另外一個進程在接收,這個進程就是類 RenderProcess 。

?

RenderProcessHost 把所有的消息通過類 IPC::ChannelProxy 發送出去,在另一個子進程里通過類 RenderThread 和類 RenderView 來接收消息,然后在類 RenderThread 和類 RenderView 把消息分發處理。

?

谷歌瀏覽器的源碼分析(20)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲国产成人91精品 | 亚洲视频在线网 | 亚洲va欧美va国产va天堂 | 欧美 日韩 中文字幕 | 亚洲在线网 | 久久免费观看视频 | 噜噜噜天天躁狠狠躁夜夜精品 | 污网站视频在线观看 | 国产一区精品视频 | 免看一级a毛片一片成人不卡 | 久久久精品中文字幕 | 亚洲va国产日韩欧美精品色婷婷 | 九九九热在线精品免费全部 | 中文字幕亚洲综合久久2 | 综合在线播放 | 天天干网站 | 久热这里只有精品视频6 | 欧美一区视频 | 亚洲综合春色另类久久 | 久久久久久久久影院 | 久久久久久噜噜噜久久久精品 | 99久久99久久久精品齐齐鬼色 | 国产成人精品免费视 | 国产精品区一区二区三 | 免费h片在线观看网址最新 免费v片在线观看无遮挡 | 久久精品国产精品亚洲毛片 | 欧美乱大交xxxxxx喷潮免费 | 奇米第九色 | 青草小视频 | 久久无码精品一区二区三区 | 热久久在线观看 | 欧美视频一区在线 | 羞羞视频在线观看 | 久久久久久久尹人综合网亚洲 | 亚洲视频综合 | 日本aⅴ网站| 在线视频亚洲 | 狠狠色综合色综合网络 | 国产美女免费观看 | 国产在线观看a | 中文伊人|