java mojo是什么_Mojo

Mojo是Chromium提供的用于进程间或进程内的模块间通信的一种机制,它屏蔽了通信时的类型转换。本文介绍了Mojo的一些基础概念,如何在工程中引入Mojo,并介绍了Mojo生成器以及相关知识。

关于如何在Blink使用Mojo可以看这篇文档。

开始我们的Mojo

想要在一个已经支持Mojo的应用(例如Chrome)使用它的话,最快捷的方式是查看使用的开发语言(C++,JavaScript或Java)对应的绑定文档(构建生成的代码(文档?)称为绑定-binding),也可以查看Mojom IDL与绑定生成器。

如果你需要关于创建/连接服务的文档,可以看Services documentation。

如果你需要查看如何将旧架构改造为新架构,可以查看将Chrome IPC改造为Mojo。

系统概述

Mojo是一个多个runtime库的合集,它提供了一个与平台无关的常用IPC语法,消息IDL格式,以及生成多种目标语言代码的绑定库,目的是便于跨进程及进程内边界间(指的是chromium侧,blink侧,第三方侧)的消息传递。

组成Mojo的不同的库对应不同的文档,功能的基本层级如下:

Mojo Core

为了使用高级库,例如System API或Bindings API,进程必须首先初始化Mojo Core。这是一次性操作,初始化后在进程的整个生命周期内都要保持其活动状态。初始化Mojo Core的两种方案:通过静态链接(Embedder API)或动态库链接。

静态链接(Embedding)

多数进程使用embedders方式连接Mojo,也就是说他们静态链接//mojo/core/embedder,每个进程内调用mojo::core::Init()初始化Mojo。文档Mojo Core Embedder API可以获取更多细节。

这样做的好处(静态链接)是可以确保使用Mojo的全部进程都使用了相同版本的Mojo Core。其他场景请使用动态链接。

动态链接(Dynamic Linking)

某些平台上,也可以使用动态链接Mojo Core库(libmojo_core.so或mojo_core.dll)的方式。

使用动态库,放置相关库的目录需要达到以下条件:应用的工作目录

环境变量MOJO_CORE_LIBRARY_PATH命名的目录

运行时应用显示命名的目录

跟静态链接时调用mojo::core::Init()不同,应用使用动态链接Mojo Core时需要调用C语言的MojoInitialize()。该调用找到并加载Mojo Core库以便后续Mojo API的使用。

注意,Mojo Core动态库是稳定的向前兼容的,该库支持所有当前的以及今后版本的higher-level public System和Bindings API。

C System API

一旦进程中的Mojo完成初始化,则在进程的整个生命周期内,该进程的任意线程都可以使用Mojo的C语言公共API。这是一个轻量级的API,小,稳定,向前兼容,是Mojo Core库的公共接口合集。

该API几乎不会直接调用,但是它是构建更高级别Mojo API的基础。它提供了消息管道,数据管道,共享buffer等创建及交互的Mojo API,以及进程间的引导连接API。

Platform Support API

Mojo为特定平台的IPC原语提供了一小部分抽象,目的是在两个进程间使用Mojo IPC。关于Platform API可以看这里。

High-Level System APIs

对于其支持的每种语言,都会有个一个较小的,高级别的系统API,基于低级C语言API构建。跟C语言API一样,相对于绑定API,系统API也很少被调用,不过有时还是需要且必要的。

C++

C++系统API提供了一层C++帮助类和函数,使安全系统API的使用更加容易:强类型句柄域,同步等待,系统句柄包装和解包的帮助类,常用句柄操作,以及更容易监控句柄状态变化的工具类。

JavaScript

JavaScript System API为JavaScript提供了Mojo原语,该原语覆盖全部Mojo基础功能的底层C语言API。

Java

Java System API提供了用来操作Mojo原语的帮助类,该原语覆盖全部Mojo基础功能的底层C语言API。

High-Level Bindings APIs

通常开发者定义接口而不是直接调用原始的消息管道I/O,这些接口用于生成指定开发语言的代码,该代码类似于常用的方法调用接口。这就是绑定层。

Mojom IDL and Bindings Generator

使用Mojom IDL定义接口,这个IDL会交给绑定生成器(bindings generator)用来生成不同开发语言的代码。生成的代码管理了接口客户端之间,实现之间传递的消息的编解码,简化了代码 - 隐藏消息管道 - 在所有接口连接侧。

C++ Bindings

目前为止,这是最常用的Mojo定义的API,C++ Bindings API提供了一组强大的功能,该功能用于通过生成的C++绑定代码与消息管道交互,还包括了支持相关绑定端点(bindings endpoints),相关接口,嵌套同步IPC(nested sync IPC),版本控制,错误日志报告,消息过滤器注入以及便利的测试套件。

JavaScript Bindings

JavaScript Bindings API提供了帮助类,该帮助类用于操作绑定生成器生成的JavaScript代码。

Java Bindings

Java Bindings API提供了帮助类,该帮助类用于操作绑定生成器生成的Java代码。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值