gRPC接口怎样从proto文件到具体使用

简介: gRPC接口怎样从proto文件到具体使用


proto文件转为头文件和源码

proto文件是一种预编译的规定文件,用来告诉gRPC 的服务如何生成对应的代码。

具体的使用方式请参考:介绍文档:proto 文件的关键字介绍

具体的说,一个proto文件分为三部分:指定环境,制定消息结构,制定接口


指定环境

在这里插入图片描述

1:代表使用的proto接口适用版本是 2 版本还是 3 版本。这里我们使用 3 版本

2: 这里指定生成的代码中的命名空间的叫法。

制定消息结构

消息结构是指:以message关键字指定的数据结构体。用法类似于C 语言中请添加图片描述

struct


这里我们使用了 repeated 关键字,他的用法是指定对象为数组。

具体的其他关键字请参见扩展阅读:介绍文档:proto 文件的关键字介绍

制定接口

请添加图片描述

接口适用rpc关键字声明,另外同类型的接口可以使用service 关键字设置为一个类对象中,便于分别管理

源码的使用

生成库文件和源码

#!/bin/bash
# 检查是否提供了文件名参数
if [ -z "$1" ]; then
  echo "用法: $0 文件名 输出目录"
  exit 1
fi
# 设置输出目录 
# 检查是否将输出目录设置 
if [ -z "$2" ]; then 
  OUTDIR_PROTO=$(dirname "$0")
else
  OUTDIR_PROTO=$2
fi
# 使用提供的文件名和语言
NAME_PROTO=$1
protoc --cpp_out=. $NAME_PROTO
protoc --cpp_out=$OUTDIR_PROTO --grpc_out=$OUTDIR_PROTO --plugin=protoc-gen-grpc=/usr/local/bin/grpc_cpp_plugin $NAME_PROTO

这里我写好一个脚本,用以生成对应的c++格式接口库文件, 需要注意的是,脚本中的protoc-gen-grpc指定的程序地点是要和自己安装时保持一致的。

使用时,只要传入proto后缀的文件名 和输出目录,就能得到对应的库文件。

库文件包括两种,*.pb.h*.grpc.pb.h前者是message定义的结构体的声明定义文件。后者是接口的 声明定义文件。


使用方式

在自己的代码中 引用 grpc 的头文件,和对应的自己需要的生成的库文件,如下:


源码的编译

请参照 官方提供的cmakefile 编译工具,路径如下:you/path/grpc-v1.45.2/examples/cpp/helloworld/CMakeLists.txt


分享一个有趣的 学习链接:https://xxetb.xet.tech/s/HY8za


目录
相关文章
|
8月前
|
中间件 Go 数据处理
Go语言学习 - RPC篇:gRPC-Gateway定制mux选项
通过上一讲,我们对gRPC的拦截器有了一定的认识,也能定制出很多通用的中间件。 但在大部分的业务系统中,我们面向的还是HTTP协议。那么,今天我们就从gRPC-Gateway的mux选项出发,一起来看看一些很实用的特性。
124 0
|
8月前
|
存储 JSON Go
Golang 语言 gRPC 服务怎么同时支持 gRPC 和 HTTP 客户端调用?
Golang 语言 gRPC 服务怎么同时支持 gRPC 和 HTTP 客户端调用?
109 0
|
7天前
|
JSON 负载均衡 安全
对gRPC中常见的 grpc::CreateChannel()这个类所创建的对象所包含的属性做详细介绍
对gRPC中常见的 grpc::CreateChannel()这个类所创建的对象所包含的属性做详细介绍
12 0
|
1月前
|
存储 JSON 数据格式
NVMf RPC接口文件 nvmf_rpc.c
NVMf RPC接口文件 nvmf_rpc.c
|
7月前
|
JSON Linux 测试技术
go语言处理数据、基本通信以及环境配置 -- json,protobuf,grpc
go语言处理数据、基本通信以及环境配置 -- json,protobuf,grpc
|
8月前
|
测试技术 Go
gRPC源码分析(四):剖析Proto序列化
首先,针对读源码是先看源代码还是测试代码,因人而异。个人建议在对源码毫无头绪时,先从测试入手,了解大致功能;如果有一定基础,那么也可以直接入手源代码。我认为优秀的Go源码可读性是非常高的,所以一般情况下,我都直接从源文件入手,遇到问题才会去对应的测试里阅读。
75 1
|
7月前
|
JSON Go PHP
Protobuf 的 proto3 与 proto2 的区别
Protobuf 的 proto3 与 proto2 的区别
222 0
|
负载均衡 Dubbo 前端开发
HTTP 与 RPC 接口区别
HTTP 与 RPC 接口是两种常见的接口通信协议。本文将会介绍它们的定义,区别和相同之处,应用场景以及目前的技术发展趋势,并给出接口代码示例和开发常用工具。
HTTP 与 RPC  接口区别
|
算法 C++ Python
师父给了我一个 .proto 文件,我应该怎么使用?
师父给了我一个 .proto 文件,我应该怎么使用?
144 0
|
分布式计算 Dubbo Hadoop
使用Hadoop提供的工具实现基于Proto协议的RPC通信
使用Hadoop提供的工具实现基于Proto协议的RPC通信
204 0