MozillaIPDL基本概念解析
Posted 林多
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MozillaIPDL基本概念解析相关的知识,希望对你有一定的参考价值。
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
参考资料
- IPDL Tutorial
- Extending a Protocol
- IPDL Type Serialization
- IPDL Best Practices
- Glossary
- PBackground
- IPDL-Mozilla Wiki
以上是关于MozillaIPDL基本概念解析的主要内容,如果未能解决你的问题,请参考以下文章
“灾难无情人有情”:备战金三银四之微服务架构问题!(含解析)