在 Docker 中生成 ProtoBuffer、gRPC 文件
时间:2022-07-22
本文章向大家介绍在 Docker 中生成 ProtoBuffer、gRPC 文件,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
使用 znly/protoc 这个镜像来在docker中生成 protobuffer 和 grpc 文件。
Python 语言版
基本用法:
docker run --rm --user `id -u ${USER}` -v `pwd`:`pwd` -w `pwd` znly/protoc
--plugin=protoc-gen-grpc=/usr/bin/grpc_python_plugin
--python_out=生成的pb文件路径 --grpc_out=生成的grpc的pb文件路径
-I路径 pb文件名
假设我们的项目结构长这样:
api/v1/my_server.proto 放置.pb文件
client/ 放置生成的pb文件,如 xx_pb2.py, xx_pb2_grpc.py
Makefile
首先编辑 Makefile:
client/my_server_pb2.py client/my_server_pb2_grpc.py: api/v1/my_server.proto
@docker run --rm --user `id -u ${USER}` -v `pwd`:`pwd` -w `pwd` znly/protoc
--plugin=protoc-gen-grpc=/usr/bin/grpc_python_plugin
--python_out=client --grpc_out=client
-Iapi/v1 my_server.pb
compile-proto: client/my_server_pb2.py client/my_server_pb2_grpc.py
注意 @
是在调用 make 命令时不输出当前指令。
接下来,我们在命令行执行 make compile-proto
就可以了。
Go 语言版
.pb.go 文件
如果说我们想直接生成 .pb.go 文件到proto文件同一个目录下,可以这样写:
api/v1/my_server.pb.go: api/v1/my_server.proto
@docker run --rm --user `id -u ${USER}` -v `pwd`:`pwd` -w `pwd` znly/protoc -I.
--go_out=plugins=grpc:. api/v1/my_server.proto
pb 文件
如果说我们要生成一个 .pb 文件到 client 目录下:
client/my_server.pb: api/v1/my_server.proto
@docker run --rm --user `id -u ${USER}` -v `pwd`:`pwd` -w `pwd` znly/protoc -I.
--include_imports --include_source_info
--descriptor_set_out=client/my_server.pb
--go_out=plugins=grpc:. api/v1/my_server.proto
- [MSDN]通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行
- Flask-配置与调试
- PXE+kickstart网络安装CentOS7.4系统及过程中各种报错
- MSDN官方的ASP.Net异步页面的经典示例代码
- Nginx反向代理、负载均衡功能
- 2018即将面临的12个云安全风险
- Flask快速入门,知识整理
- python的reduce()函数
- 企业级memcached缓存数据库结合php使用与web管理memcached
- python中星号的意义(**字典,*列表或元组)
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
- 还没开始学Python之前,你要知道,Python程序员一定会的十件事
- zabbix-server端与zabbix-agent端部署与监控
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Centos 7 备份MySQL/MongoDB并发邮件脚本
- Nginx启动报错:sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object
- 有赞美业店铺装修前端解决方案
- nginx部署react项目
- Golang 标准库 限流器 time/rate 设计与实现
- Node搭建简易的UDP服务器
- cordova run android 下载gradle报timeout
- How we redesign the NSQ-NSQ重塑之客户端
- [PHP] 使用php生成下载csv文件
- 深入浅出MySQL crash safe
- Cordova+React+Ant.design项目搭建
- ubuntu配置ZeroTier
- 有赞零售小票打印图片二值化方案
- 虚拟机中CentOS获取ip
- CentOS7 安装JDK8,tomcat8