原虫?协议缓冲区是google的语言无关 , 平台无关的可扩展机制 , 用于序列化结构化数据 。gRPC使用protobuf作为定义数据结构和服务的语言 。您可以将其与REST服务的严格文档进行比较 。Protobuf语法非常严格 , 因此机器可以进行编译 。
下面的代码块是一个简单的原始文件 , 描述了一个简单的待办事项服务以及用于通信的数据结构 。
用于定义数据结构的" message"关键字
用于定义服务的" service"关键字
" rpc"关键字 , 用于定义服务功能
syntax = "proto3";package gogrpcspec;message Employee {string name = 1;}message Task {Employee employee = 1;string name = 2;string status = 3;}message Summary {int32 todoTasks = 1;int32 doingTasks = 2;int32 doneTasks = 3;}message SpecificSummary {Employee employee = 1;Summary summary = 2;}service TaskManager {rpc GetSummary(Employee) returns (SpecificSummary) {}rpc AddTask(Task) returns (SpecificSummary) {}rpc AddTasks(stream Task) returns(Summary) {}rpc GetTasks(Employee) returns (stream Task) {}rpc ChangeToDone(stream Task) returns (stream Task) {}} 将原始代码编译为服务器代码由于protobuf非常严格 , 因此我们可以使用" protoc"将proto文件编译为服务器代码 。编译后 , 您需要对其实施真实的逻辑 。
protoc --go_out=plugins=grpc:. ${pwd}/proto/*.proto
--proto_path=${pwd}
编译原始代码到客户端代码有了proto文件 , 我们可以使用" protoc"将其客户端代码编译为许多流行的语言:C# , C ++ , Dart , Go , JAVA , JavaScript , Objective-C , php , Python , Ruby等 。
gRPC rpc类型gRPC支持多种rpc类型(不过 , 在本文中我不会强调)
· 一元RPC(请求-响应)
· 客户端流式RPC
· 服务器流式RPC
· 双向流式RPC
开发流程为了在各个团队之间采用gRPC , 我们需要一些东西 。
· 集中式代码库(用于服务之间通信的gRPC规范)
· 自动生成代码
· 服务用户(客户)可以通过软件包管理器使用生成的代码(用于他们选择的语言) , 例如 。去获取/点安装
此示例的代码可以在此仓库中找到:
- https://github.com/redcranetech/grpcspec-example
- https://github.com/redcranetech/grpc-go-example
- https://github.com/redcranetech/grpc-python-example
代码库的结构
.
├── HISTORY.md
├── Makefile
├── README.md
├── genpyinit.sh
├── gogrpcspec //go generated code here
│ └── ...
├── proto
│ └── todo.proto
├── pygrpcspec //python generated code here
│ ├── ...
└── setup.py
git钩子我将设置githook , 以便在提交之前自动生成内容 。如果合适 , 您可以使用CI(drone / gitlab / jenkins /…) 。(使用githook的缺点是每个开发人员都需要先配置githook)
您需要一个目录(文件夹)来保留预提交脚本 。我称之为" .githooks"
$ mkdir .githooks$ cd .githooks/$ cat <<EOF > pre-commit#!/bin/shset -emake generategit add gogrpcspec pygrpcspecEOF$ chomd +x pre-commit 预提交脚本将触发Makefile并git添加2个目录(gogrpcsepc , pygrpcspec)
为了使githooks正常工作 , 开发人员必须运行以下git config命令:
$ git config core.hooksPath .githooks 我们将此命令添加到Makefile中 , 以使开发人员可以轻松地运行此命令(称为" make init") 。Makefile的内容应如下所示 。
# content of: Makefileinit: git config core.hooksPath .githooksgenerate: # TO BE CONTINUE 产生程式码我们已经设置了githooks来运行Makefile(" make generate") 。让我们深入了解将自动生成代码的命令 。本文将重点介绍两种语言-go , python
生成go代码
我们可以使用protoc将.proto文件编译成go代码 。
protoc --go_out=plugins=grpc:. ${pwd}/proto/*.proto --proto_path=${pwd}我们将改为通过Docker使用protoc(为了便于开发人员使用)docker run --rm -v ${CURDIR}:${CURDIR} -w ${CURDIR}
znly/protoc
--go_out=plugins=grpc:.
${CURDIR}/proto/*.proto
--proto_path=${CURDIR}
推荐阅读
- 一个木马病毒是如何诞生的?
- 茉莉花茶如何做,真假茉莉花茶鉴别
- 带你玩转MySQL,索引揭秘,看我是如何让你的查询性能指数提升的
- 花茶的感官鉴赏,如何鉴别花茶的好坏
- 如何以非root用户运行Docker容器
- 薰衣草花茶搭配,花茶如何品饮
- 牛蒡茶最好是单独饮用,金银花茶如何贮存
- 薰衣草花茶如何选购,茉莉花茶如何喝
- 黑客基础入门,如何利用文件上传执行xss攻击!
- 教你如何一键生成Nginx配置,让配置不在繁琐
