首页 > 其他分享 >个人对chromium mojo的理解

个人对chromium mojo的理解

时间:2022-10-08 19:11:47浏览次数:56  
标签:node core 创建 接口 理解 NodeController chromium mojo

mojo本质是Uinx Domain Socket(posix)在本机的进程间进行通信时不会经过网卡,可以少一次拷贝。

mojom的用途

主要用于进程间通信,减少模块间依赖。

用接口描述语言书写mojom接口文件,经过编译之后会自动生成对应的mojo类

mojo底层管道的创建

mojo的通信依赖于底层MessagePipe,管道的创建在mojo/core/core.cc
core::CreateMessagePipe,传入管道的两端handle,这里的handle就是mojo handle了,管道创建成功并不意味着底层socket创建,发送invitation的时候才会真正创建socket

Node网络

用于给mojo提供消息路由功能,在全局对象core中存在一个node_controller_在创建MessagePipeDispatcher的时候,会将NodeController对象传入。

NodeController持有Node(由于全局对象core持有NodeController是否说明NodeController对象也是全局唯一?)

Node维护了一系列的Port,Port有name

NodeController有一个peers_的map,当收到invitation的时候(OnAcceptInvitation)建立连接,并将对端存入这个map

using NodeMap = std::unordered_map<ports::NodeName, scoped_refptr<NodeChannel>>;
NodeMap peers_;

OnAcceptInvation的实质是收到一个Message(来源于OnChannelMessage
发送邀请过程如下,A邀请B
(A)SendInvitation->(A)AcceptInvitee->(B)OnAcceptInvitee->(B)AcceptInvitation->(A)OnAcceptInvitation->(A)AddPeer,邀请结束,链接建立成功(两次握手)其中,AcceptInviteeAcceptInvitation的消息都是通过NodeChannelChannel对象发送消息
按照文档说明,node与node之间一开始只有IPC点对点通信,假如要发给另一个node,但是和当前node之间没有直接的IPC,则需要通过broker建立一个新的IPC通道,REQUEST_INTRODUCTION消息就是这个过程

NodeChannel

NodeName一起保存在peers_中。对上封装的接口,用于Node to Node的IPC接口。

NodeChannel::Introduce负责介绍两个不认识的node相互认识(建立IPC通道)

也是在Invitation阶段创建的,和PlatformChannel一致,连接两端时创建

Channel

NodeChannel对应的各平台实现,自身对象由NodeChannel持有
NodeChannel::WriteChannelMessage会通过Channel::Write发送消息,对端信息包含在参数的message中,channel本身持有socket(posix),这个socket其实就是PlatformChannel创建的,message参数中包含对端的PlatformHandle,Handle里面有socket

port

消息Messages在Ports的两端传输,一组Ports就代表了一个外层的MessagePipe

PlatformChannel

mojo底层用来通信的通道,本质是Unix Domain Socket,在Core::SendInvitation的时候创建底层的sockcet
Core::AcceptInvitation时也会创建(Windows不是socket,而是named pipe)

public c system to core

对外提供c接口,调用mojo使用这些接口,当调用这些接口时,将会通过dispatcher.cc(抽象基础类,具体有不同的实现,例如MessagePipeDispatcher)进行分发处理

对应接口的实现经过thunk.cc转换后调用到core.cc中的函数

entrypoints.cc中有全局变量g_thunks来持有g_core变量执行到core,完成函数转换这就完成了一次调用

dispatcher

dispatcher负责分发实现通用接口的不同实现方式,dispatcher在core内被创建时会存放到HandleTable中,并返回对应的MojoHandle

例如MessagePipeDispatcher就持有NodeController,是由全局对象core传过来的

MessagePipeDispatcher对象还持有一个port,也是在一创建就传入的(由NodeController和其Node通过CreatePortPair创建的,在CreateMessagePipe的时候)

Broker

一个单独的node在node网络中被称作Broker,它的作用是

  • 提供介绍机制(Introduce)帮助一对node建立IPC链接
  • 复制node的handle(由于沙盒,node自身可能办不到)
  • 创建共享内存

broker是个特殊的node channel,规定只有它能introduce(通过调用NodeController的能力找到两个node)并发送Introduce message,这就要求broker需要跟每个node都有链接

在接受invitation和创建invitation的时候,例如在NodeController::OnAcceptInvitation中,执行AddPeer添加对端后,还给broker channel添加了远端的client

标签:node,core,创建,接口,理解,NodeController,chromium,mojo
From: https://www.cnblogs.com/lenomirei/p/16769933.html

相关文章

  • [转]深入理解Docker ulimit(docker容器启动报错library initialization failed - unab
    原文地址:深入理解Dockerulimit-DockOne.io【编者的话】Docker大规模应用后,如果你没踩过坑,说出去肯定没人信。昨天就遇到一个ulimit的经典问题:业务Container内ulimit值......
  • Demo26_加强方法调用的理解
    //加强方法调用的理解packagecom.HuanXin.Fan_Fa_5;publicclassDemo02{publicstaticvoidmain(String[]args){CHX();//调用下文CHX()方法}//......
  • "软件质量"的理解
    软件质量就是“软件与明确地和隐含地定义的需求相一致的程度”。更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软......
  • 如何理解智能制造?
    智能制造是包括工业互联网、材料、设计、工艺等在内的智能工业生态系统。这是工信部赛迪研究院软件所所长潘文给出的定义。智能制造的实现主要依托两个基础能力,一个是工业......
  • 软件项目管理的理解
     对于我们这些小白大学生来说,我们需要不断地对个人能力进行提升。读了邹欣老师的书理解了什么是软件工程,百度百科上了解到软件项目管理是指软件生存周期中软件管理者所进......
  • 如何理解vue中的v-bind?
    如果你写过vue,对v-bind这个指令一定不陌生。下面我将从源码层面去带大家剖析一下v-bind背后的原理。会从以下几个方面去探索:v-bind关键源码分析v-bind化的属性统一存储在哪......
  • 如何理解git rebase?
    在mergePR的过程中,rebaseandmerge会产生冲突,因此需要补充一下Gitrebase的知识点。​​UnderstandingRebase(AndMerge)inGit​​​​Mergingvs.Rebasing​​webst......
  • 简单理解slot算法和shadow DOM
    阅读完这篇博客你会有以下收获:slot算法是什么?shadowDOM是什么?vueslot机制与w3cwebcomponent规范的shadowDOM渲染结果有何异同?slot算法Theslottingalgorithmassign......
  • 你真的理解==和===的区别吗?
    用中文怎么叫合适?相等?全等?其实并不合适,叫doubleequals或者trebleequals,或者叫不懂的人觉得比较不专业的双等或者三等操作符,是更加严谨和正确的叫法。为什么这么说?看完......
  • 如何理解package.json中的proxy字段?
    入职新公司以来,第一个月接手vue项目,第二个月接手angularjs项目,第三个月加入react重构项目。心生感叹:业务驱动式学习是一种高效率的学习方式,保持好奇心,在业务中快速成长!新项......