Chromium进程间通信Mojo bindings已经描述了怎么使用Mojo接口进行IPC通信。我们在Chromium中的使用方法差不多。不过我们不需要显式的去建立进程间的IPC连接,因为这些Chromium代码已经做好了。
Chromium的每个进程都有一个Service Manage,它管理着多个Service。每个Server又管理者多个Mojo接口。在Chromium中我们需要做的是定义Mojo接口,然后在恰当的地方去实现注册接口、实现接口。
因为历史原因,不同从场景,Chromium中接口的注册和绑定方法各种各样。通常的套路以下:
- 发送方定义一个
mojo::Remote<xxx>
的变量remote
- 通过
remote.BindNewPipeAndPassReceiver()
获得远程接口
- 调用remote接口上方法
- 接收方收到
mojo::PendingReceiver<xxx>
pr,生成mojo::Receiver<xxx>
receiver
- receiver相应的方法被调用
或者:
- 定义一个
mojo::Receiver<xxx>
的变量receiver
- 通过
receiver.BindNewPipeAndPassRemote()
获得远程调用
- 远程收到
mojo::PendingRemote<xxx>
pr,生成ojo::Remote<xxx>
remote
- remote 调用接口
- receiver相应的方法被调用
其中第二步处理remote.BindNewPipeAndPassReceiver()
和receiver.BindNewPipeAndPassRemote()
很关键。在你想添加代码文件的目录,搜一下BindNewPipeAndPassReceiver
或者BindNewPipeAndPassRemote
,具体的方法参考对应的代码上下文。