Protobuf-Plugin机制

本文介绍了protobuf的plugin机制,包括父子进程如何通过共享fd进行通信,详细讲解了通信接口定义以及plugin的实现方式。重点阐述了自定义CodeGenerator类的子类,并使用Subprocess类来建立父子进程间的pipe,实现protobuf的跨平台、跨语言扩展。
摘要由CSDN通过智能技术生成

plugin机制

protobuf是一个支持plugin机制的序列化框架,除了protobuf自带的几种语言的CodeGenerator,用户可以按需实现自己的插件,来实现语言的拓展(比如protoc-gen-lua)或者功能的拓展(厂子内部的mcpack2pb插件)。

因为protoc插件需要实现跨平台、跨语言,所以采用的方式是父子进程的工作方式,父子进程通过pipe(父子进程共享fd)方式通信,父子进程通信数据的格式定义在compiler/plugin.proto。

  1. 父进程(protoc进程)中负责读取proto文件,转化为CodeGeneratorRequest格式,启动子进程,以及后续持久化子进程返回内容;
  2. 子进程(自定义插件进程)完成中子进程中启动自定义的CodeGeneratorResponse格式,按照自己需要完成处理,返回给父进程(protoc进程);

avatar

父子进程共享fd工作机制说明:

利用父子进程共享fd机制,建立pipe(单工模式)。

  1. 子进程一侧,做重定向,将stdin_pipe[0]重定向到STDIN_FILENOstdout_pipe[1]重定向到STDOUT_FILENO
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值