chromium mojo 快速入门

术语:

消息管道:是一组端点. 每个endpoint有一个接受消息的队列, 在一个端点上写消息会高效地放入对端端点的消息队列上。所以消息管道是双工通信的。

mojom文件:描述了接口它们描述了类似proto files的强类型消息结构,通过binding generator可以产生对应于不同语言的文件。

给定一个mojom interface和一条message pipe, 它的两个端点可以打上InterfacePtrBinding的标签。现在它描述了一条这样的message pipe,它发送由mojom interface描述的消息。

InterfacePtr:是发送消息的端点,一旦绑定到一个消息管道的端点,就可以马上序列化要发送的消息,并写入管道

InterfaceRequest:是接受消息的端点,本质上仅仅是一个持有消息管道端点的容器,本身不会做任何事情,需要传递到直到绑定了实现了mojom文件接口的类,才能读取消息。


考虑如下的mojom文件:

module sample.mojom;

interface Logger {
  Log(string message);
};

通过mojo的binding generator可以产生以下的logging.mojom.h的c++文件:

namespace sample {
namespace mojom {

class Logger {
  virtual ~Logger() {}

  virtual void Log(const std::string& message) = 0;
};

using LoggerPtr = mojo::InterfacePtr;
using LoggerRequest = mojo::InterfaceRequest;

}  // namespace mojom
}  // namespace sample

 首先需要创建消息管道,通常调用MakeRequest创建:

#include "sample/logger.mojom.h"

sample::mojom::LoggerPtr logger;
auto request = mojo::MakeRequest(&logger);

MakeRequset的如下: 

template 
InterfaceRequest MakeRequest(
    InterfacePtr* ptr,
    scoped_refptr runner = nullptr) {
  MessagePipe pipe;
  ptr->Bind(InterfacePtrInfo(std::move(pipe.handle0), 0u),
            std::

你可能感兴趣的:(chromium)