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


目录
相关文章
|
7月前
|
人工智能 搜索推荐 测试技术
通义灵码 2.0 智能编码功能评测:Deepseek 加持下的 Python 开发体验
通义灵码 2.0 智能编码功能评测:Deepseek 加持下的 Python 开发体验
296 11
|
8月前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
644 15
|
开发框架 安全 .NET
使用grpcui测试gRPC服务
使用grpcui测试gRPC服务
299 0
|
开发工具 对象存储 git
|
机器学习/深度学习 编解码 自然语言处理
【YOLOv8改进 - 注意力机制】 MHSA:多头自注意力(Multi-Head Self-Attention)
YOLO目标检测专栏探讨了BoTNet,一种在ResNet瓶颈块中用全局自注意力替换卷积的架构,提升实例分割和检测性能。BoTNet表现优于先前的ResNeSt,且在ImageNet上速度更快。文章介绍了多头自注意力(MHSA)机制,用于学习输入的不同部分间的关系。BoTNet的MHSA层整合在低分辨率特征图中,以捕获长距离依赖。YOLOv8进一步引入MHSA,通过具体的模块定义(如提供的`MHSA`类)来增强模型的注意力机制。相关论文和代码链接可供参考。
|
Java iOS开发 MacOS
MacOS切换JDK版本
MacOS切换JDK版本
6173 0
|
关系型数据库 MySQL Go
Mysql查看数据库时区并设置时区
Mysql查看数据库时区并设置时区
734 0
|
存储 中间件 测试技术
gRPC(六)进阶:拦截器 interceptor
拦截器本质上就是一个特定类型的函数,所以实现拦截器只需要实现对应类型方法(方法签名相同)即可。
1283 1
gRPC(六)进阶:拦截器 interceptor
|
存储 弹性计算 JSON
云服务器日志备份的两种思路实践
## 1 背景 最近在做Incountry产品的SRE工作,由于线上的vault audit日志较大,导致磁盘利用率不足,需要对vault日志进行备份后并在机器上删除。初步考虑通过OSS来备份日志,以实现对日志文件备份的需求。 ## 2 思路一:通过ECS挂载OSS实现日志备份 参考文档:[通过云存储网关挂载OSS](https://help.aliyun.com/document_detail
986 0
云服务器日志备份的两种思路实践
|
存储 自然语言处理 C语言
你学废了Python的max函数与min函数的妙用吗?
你学废了Python的max函数与min函数的妙用吗?
385 0
你学废了Python的max函数与min函数的妙用吗?