【Mozilla】IPDL基本概念解析

Mozilla IPDL

什么是IPDL

  • IPDL的全称为“Inter-process-communication Protocol Definiton Language”
  • 它是一种进程间通信协议定义语言(多多少少有点像Android的AIDL)
  • 它是一种使C++代码可以规范的、安全的在进程间或线程间传递的语言
    • 等价于一种平台独立的接口语言
    • 主要针对C++实现
    • Mozilla私有
    • Firfox/FirfoxOS使用IPDL声明Message(firFoxOS是KaiOS的前身)
      【Mozilla】IPDL基本概念解析_第1张图片

IPDL协议

  • 使用IPDL语言,定义IPDL协议。协议声明了Actors间如何进行通信:
    • 定义了通信的接口
    • 定义了通信的消息
      【Mozilla】IPDL基本概念解析_第2张图片
  • Actors:
    • Actors指IPDL消息的发送者:比如P(Parent)/C(Child)端
    • Parent与Child对应关系:
      • 下面左边有Parent、右边有Child
      • Chrome Process(Browser) <-> Content Process(Render)
      • Content Process(Render) <-> Plugin Process

IPDL与WebIDL

  • WebIDL: w3c标准的接口定义语言( Interface Definition Languag),用于WebAPI设计开发。
  • IPDL与WebIDL的关系:
    【Mozilla】IPDL基本概念解析_第3张图片

IPDL与IPC

  • IPC:Inter-Process Communication
  • IPDL与IPC的关系:
    • IPDL可以理解为协议层:序列化数据、发/接消息
    • IPC可以理解为传输层: pipe或socket等等
      【Mozilla】IPDL基本概念解析_第4张图片

IPDL主要概念

角色(Actor)
  • 父端(Parent)和子端(Child)称为角色
  • 所有IPDL消息通过父/子发送
  • 父子端对应关系:
    【Mozilla】IPDL基本概念解析_第5张图片

协议

  • 协议指由IPDL(语言)定义的,用于Actor间进行通信的规范
  • 协议类型:
    • sync:可声明同步和异步消息
    • async:可声明异步消息
    • rpc:可声明RPC消息(类似于sync,尽量不要使用)
  • 例:
    • 声明了一个名称为PPlugin的IPDL协议
    • 父向子发送的异步消息: Init()、ShuntDown
    • 子向父发送的异步消息: Ready()
async protocol PPlugin
{
     
child:
    async Init(nsCString pluginPath);
    async Shutdown();

parent:
    async Ready();
};
子协议(Subprotocols)与协议管理(Protocol Management)
  • 一个IPDL协议可以有多个子协议,这些子协议由“该协议”管理。
    【Mozilla】IPDL基本概念解析_第6张图片
  • 协议管理
    • 协议负责其子协议的创建(所有子协议,通过该协议创建)
    • 一旦协议实例销毁,其关联的子协议也将销毁
      【Mozilla】IPDL基本概念解析_第7张图片
消息(Message)
  • 消息类型:
    • 同步(sync):发送方阻塞,直接接收到接收方的回复
    • 异步(async):发送方不会阻塞
    • RPC:类似于sync,RPC允许“重入”消息处理程序
      • 发送方阻塞,RPC调用应答时,可以解除阻塞来处理新的传入RPC调用
  • 返回值:return关键字表示Message具有返回值
  • 顺序传递:按顺序传递
  • 关于消息类型的建议:
    • 尽可能使用异步
    • 不推荐同步
    • 尽量不要使用RPC
错误处理(Error Handling)
  • 实现 IPDL Message的C++方法返回bool类型:
    • ture:成功
    • false :数据损坏或数据格式错误(无法恢复、灾难性的错误)
  • 一旦Message的实现返回False,会进行如下处理:
    • The communication channels for the child process disconnected
    • Terminate Process
  • 对于错误处理的建议: 对于“正常错误”、“非致命”的错误,无需返回False

ShutDown(关闭)

  • 管理协议销毁时,需要通知所有子协议:
    • 不再接收任何消息
    • 通过管理协议,销毁其关联的所有子协议

IPDL Exmaple

  • Exmaple结构:JS调用 WebAPI,JS Engine调用 WebAPI Impl,WebAPI通过 IPLD进行IPC通信。
    在这里插入图片描述
  • 该部分的实现,请Mozilla官网:
    https://developer.mozilla.org/en-US/docs/Mozilla/IPDL/Extending_a_Protocol

参考资料

  • IPDL Tutorial
  • Extending a Protocol
  • IPDL Type Serialization
  • IPDL Best Practices
  • Glossary
  • PBackground
  • IPDL-Mozilla Wiki

你可能感兴趣的:(Chromium,Web,WebOS,KaiOS,IPDL,Mozilla)