【Mozilla】IPDL基本概念解析

本文深入解析了IPDL(Inter-process-communication Protocol Definition Language),一种专为C++设计的进程间通信协议定义语言。详细介绍了IPDL的基本概念,如角色、协议、消息类型及错误处理,并探讨了其与WebIDL和IPC的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mozilla IPDL

什么是IPDL
  • IPDL的全称为“Inter-process-communication Protocol Definiton Language”
  • 它是一种进程间通信协议定义语言(多多少少有点像Android的AIDL)
  • 它是一种使C++代码可以规范的、安全的在进程间或线程间传递的语言
    • 等价于一种平台独立的接口语言
    • 主要针对C++实现
    • Mozilla私有
    • Firfox/FirfoxOS使用IPDL声明Message(firFoxOS是KaiOS的前身)
      在这里插入图片描述
IPDL协议
  • 使用IPDL语言,定义IPDL协议。协议声明了Actors间如何进行通信:
    • 定义了通信的接口
    • 定义了通信的消息
      在这里插入图片描述
  • 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的关系:
    在这里插入图片描述
IPDL与IPC
  • IPC:Inter-Process Communication
  • IPDL与IPC的关系:
    • IPDL可以理解为协议层:序列化数据、发/接消息
    • IPC可以理解为传输层: pipe或socket等等
      在这里插入图片描述
IPDL主要概念
角色(Actor)
  • 父端(Parent)和子端(Child)称为角色
  • 所有IPDL消息通过父/子发送
  • 父子端对应关系:
    在这里插入图片描述
协议
  • 协议指由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协议可以有多个子协议,这些子协议由“该协议”管理。
    在这里插入图片描述
  • 协议管理
    • 协议负责其子协议的创建(所有子协议,通过该协议创建)
    • 一旦协议实例销毁,其关联的子协议也将销毁
      在这里插入图片描述
消息(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
参考资料
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值