grpc学习golang版( 四、多服务示例)
系列文章目录
第一章 grpc基本概念与安装
第二章 grpc入门示例
第三章 proto文件数据类型
第四章 多服务示例
文章目录
- 一、前言
- 二、定义proto文件
- 三、编写server服务端
- 四、编写Client客户端
- 五、测试
- 六、示例代码
一、前言
多服务,即一个rpc提供多个服务给外界调用。好比唤醒服务,可以有语音唤醒、人脸唤醒、触摸唤醒、人体唤醒。以此为基础,做一个示例。
二、定义proto文件
这里定义2个服务,一个语音唤醒服务,人脸唤醒服务。语音唤醒服务又包含各种各样的方法,比如狗叫、坤叫,狗会汪汪汪叫,猫会喵喵喵叫,坤会???,这里以狗叫为例。人脸唤醒又包含各种各样的方法,比如一耳光,一巴掌,毕竟没几个人挨一巴掌还没醒的,这里以一巴掌为例。
新建wake.proto文件示例如下:
// 指定proto版本
syntax = "proto3";package wake_grpc; // 指定默认包名// 指定golang包名
option go_package = "/wake_proto";//语音唤醒服务
service VoiceWakeService {//狗叫rpc DogBark(Request)returns(Response){}
}//人脸唤醒服务
service FaceWakeService {//一巴掌rpc ASlap(Request)returns(Response){}
}//请求参数
message Request{string name = 1;
}
//响应参数
message Response{string sound = 1;
}
在go_grpc_study/example_2/grpc_proto目录下新建Terminal,执行生成文件,命令如下
protoc --go_out=. --go-grpc_out=. ./wake.proto
目录结构变更后为

三、编写server服务端
新建server目录,新建main.go文件
目录结构如下

编写server/main.go文件
package mainimport ("context""fmt"wake_grpc2 "go_grpc_study/example_2/grpc_proto/wake_proto""google.golang.org/grpc""google.golang.org/grpc/grpclog""net"
)// 新版本 gRPC 要求必须嵌入 UnimplementedGreeterServer 结构体
type VoiceWakeServer struct {wake_grpc2.UnimplementedVoiceWakeServiceServer
}
type FaceWakeServer struct {wake_grpc2.UnimplementedFaceWakeServiceServer
}func (VoiceWakeServer) DogBark(ctx context.Context, request *wake_grpc2.Request) (pd *wake_grpc2.Response, err error) {fmt.Println("语音唤醒入参:", request.Name)pd = new(wake_grpc2.Response)pd.Sound = "汪汪汪~"return
}func (FaceWakeServer) ASlap(ctx context.Context, request *wake_grpc2.Request) (pd *wake_grpc2.Response, err error) {fmt.Println("人脸唤醒入参:", request.Name)pd = new(wake_grpc2.Response)pd.Sound = "塞班~"return
}func main() {// 监听端口listen, err := net.Listen("tcp", ":8080")if err != nil {grpclog.Fatalf("Failed to listen: %v", err)}// 创建一个gRPC服务器实例。s := grpc.NewServer()// 将server结构体注册为gRPC服务。wake_grpc2.RegisterVoiceWakeServiceServer(s, &VoiceWakeServer{})wake_grpc2.RegisterFaceWakeServiceServer(s, &FaceWakeServer{})fmt.Println("grpc server running :8080")// 开始处理客户端请求。err = s.Serve(listen)
}
具体步骤如下:
- 1)定义2个结构体,结构体名称无所谓,必须包含pb.UnimplementedGreeterServer 对象
- 2)实现 .proto文件中定义的API,
即DogBark狗叫方法,ASlap一巴掌方法 - 3)将服务描述及其具体实现注册到 gRPC 中
四、编写Client客户端
新建client目录,新建main.go文件
目录结构如下

编写clinet/main.go文件
package mainimport ("context""fmt"wake_grpc2 "go_grpc_study/example_2/grpc_proto/wake_proto""google.golang.org/grpc""google.golang.org/grpc/credentials/insecure""log"
)func main() {addr := ":8080"// 使用 grpc.Dial 创建一个到指定地址的 gRPC 连接。// 此处使用不安全的证书来实现 SSL/TLS 连接conn, err := grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials()))if err != nil {log.Fatalf(fmt.Sprintf("grpc connect addr [%s] 连接失败 %s", addr, err))}defer conn.Close()voiceClient := wake_grpc2.NewVoiceWakeServiceClient(conn)res, err := voiceClient.DogBark(context.Background(), &wake_grpc2.Request{Name: "张三",})fmt.Println(res, err)faceClient := wake_grpc2.NewFaceWakeServiceClient(conn)res, err = faceClient.ASlap(context.Background(), &wake_grpc2.Request{Name: "李四",})fmt.Println(res, err)
}
具体步骤如下:
- 1)首先使用 grpc.Dial() 与 gRPC 服务器建立连接
- 2)使用 wake_grpc2.NewVoiceWakeServiceClient(conn)、wake_grpc2.NewFaceWakeServiceClient(conn)初始化客户端
- 3)通过客户端调用ServiceAPI方法voiceClient.DogBark、faceClient.ASlap
五、测试
在server目录下,启动服务端
go run main.go
在clinet目录下,启动客户端
go run main.go
服务端运行结果

客户端运行结果

六、示例代码
go_grpc_study:grpc学习golang版
完成ヾ(◍°∇°◍)ノ゙
相关文章:
grpc学习golang版( 四、多服务示例)
系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 文章目录 一、前言二、定义proto文件三、编写server服务端四、编写Client客户端五、测试六、示例代码 一、前言 多服务,即一个rpc提供多个服务给外界调用…...
Linux安装jdk17
我们进入到cd /usr/lib/下然后创建一个jdk17的文件夹 mkdir jdk17 进入到jdk17目录下 下载jdk17包 上传到Linux 解压jar包 tar -zxvf jdk-17_linux-x64_bin.tar.gz压解完毕后 配置环境变量 vim/etc/profilei 修改 esc 退出 :wq保存 export JAVA_HOME/usr/lib/jdk17/jdk-1…...
Java家教系统小程序APP公众号h5源码
让学习更高效,更便捷 🌟 引言:家教新选择,小程序来助力 在快节奏的现代生活中,家长们越来越注重孩子的教育问题。然而,如何为孩子找到一位合适的家教老师,成为了许多家长头疼的问题。现在&…...
PHP入门
一、环境搭建 无脑: 小皮面板(phpstudy) - 让天下没有难配的服务器环境!phpStudy官网2019正式推出phpStudy V8.0版本PHP集成环境,支持Windows与Linux系统,支持WEB面板操作管理,一键网站开发环境搭建配置,…...
docker ce的使用介绍
docker docker17.03以后 docker ce,社区免费版,vscode的docker插件使用的该版本(默认windows只支持windows容器,linux支持linux容器)docker ee,企业版本 docker17.03以前 docker toolbox,基于…...
SpringCloud Alibaba Sentinel 流量控制之流控模式实践总结
官网文档:https://sentinelguard.io/zh-cn/docs/flow-control.html wiki地址:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6 本文版本:spring-cloud-starter-alibaba:2.2.0.RELEASE 如下图所…...
【高考志愿】电子科学与技术
高考志愿选择电子科学与技术专业,无疑是向着科技创新的前沿迈出坚定步伐的明智之选。这一专业以其深厚的理论基础、前沿的技术应用和广泛的就业前景,吸引了众多有志于投身科技领域的学子。 首先,电子科学与技术专业所涵盖的内容丰富而深入。它…...
2024.06.26【读书笔记】|医疗科技创新流程(前言)【AI增强版】
目录 《BIODESIGN》第二版前言详细总结前言概述新增重要内容价值导向 (Value Orientation)全球视角 (Global Perspectives)更好的教学和学习方法 (Better Ways to Teach and Learn)全新视频集合 (New Videos)扩展的“实地”案例研究 (Expanded “From the Field” Case Studies…...
kubernetes Job yaml文件解析
一、yaml文件示例 apiVersion: batch/v1 kind: Job metadata:name: test-jobnamespace: mtactor spec:completions: 3parallelism: 1backoffLimit: 5activeDeadlineSeconds: 100template:spec:containers:- name: test-jobimage: centoscommand: ["echo","test…...
php goto解密脚本源码
php goto解密脚本源码 源码下载:https://download.csdn.net/download/m0_66047725/89426171 更多资源下载:关注我。...
2023: 芒种集•序言
2023: 芒种集•序言 2023: 芒种集•序言 从西南旅游回来,一直忙着整理游记“2024:追寻红色足迹”,之后又应初建平索要刘桂蓉遗作“我们一起走过”,于是把“别了,老屋”和诗作“二月”一并合编,把我写的悼念…...
Camera定制修改
需求: Android13 MtkCamera右上角的前后摄切换点击范围小导致经常点击无反应,需增大view宽度 跟踪代码可找到对应资源文件:vendor\mediatek\proprietary\packages\apps\Camera2\feature\setting\cameraswitcher\res\ 根据vendor\mediatek\…...
LeetCode 算法:验证二叉搜索树 c++
原题链接🔗:验证二叉搜索树 难度:中等⭐️⭐️ 题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于…...
SpringBoot优点达项目实战:获取系统配置接口(三)
SpringBoot优点达项目实战:获取系统配置接口(二) 文章目录 SpringBoot优点达项目实战:获取系统配置接口(二)1、查看接口2、查看数据库3、代码实现1、创建实体类SysConfig2、创建返回数据的vo3、创建control…...
【C语言】字符/字符串+内存函数
目录 Ⅰ、字符函数和字符串函数 1 .strlen 2.strcpy 3.strcat 4.strcmp 5.strncpy 6.strncat 7.strncmp 8.strstr 9.strtok 10.strerror 11.字符函数 12. 字符转换函数 Ⅱ、内存函数 1 .memcpy 2.memmove 3.memcmp Ⅰ、字符函数和字符串函数 1 .strlen 函数原型:…...
上下文管理器在Python中的妙用
更多Python学习内容:ipengtao.com Python上下文管理器是一个非常强大的工具,它能够帮助开发者在特定代码块前后自动执行特定的操作,常用于资源管理,如文件操作、数据库连接和锁定等。本文将详细介绍Python上下文管理器的概念、使用…...
【PWN · TcachebinAttack | UAF】[2024CISCN · 华中赛区] note
一道简单的tcache劫持 一、题目 二、思路 存在UAF,libc版本2.31,经典菜单题 1.通过unsorted-bin-attack来leak-libc 2.通过uaf打tcache-bin-attack劫持__free_hook实现getshell 三、EXP from pwn import * context(archamd64,log_leveldebug)ioproce…...
Java数据脱敏
数据脱敏 敏感数据在存储过程中为是否为明文, 分为两种 落地脱敏: 存储的都是明文, 返回之前做脱敏处理不落地脱敏: 存储前就脱敏, 使用时解密, 即用户数据进入系统, 脱敏存储到数据库中, 查询时反向解密 落地脱敏 这里指的是数据库中存储的是明文数据, 返回给前端的时候脱…...
【Java Web】三大域对象
目录 一、域对象概述 二、三大域对象 三、域对象使用相关API 一、域对象概述 一些可用于存储数据和传递数据的对象被称为域对象,根据传递数据范围的不同,我们称之为不同的域,不同的域对象代表不同的域,共享数据的范围也不同。 二、…...
【Linux】进程信号_3
文章目录 八、进程信号2. 信号的保存3. 信号的处理 未完待续 八、进程信号 2. 信号的保存 实际执行信号的处理动作称为信号递达(Delivery) 信号从产生到递达之间的状态,称为信号未决(Pending)。 进程可以选择阻塞 (Block )某个信号。 被阻塞的信号产生时将保持在未决状态,直到…...
终极指南:如何从零开始打造你的第一台六足机器人
终极指南:如何从零开始打造你的第一台六足机器人 【免费下载链接】hexapod 项目地址: https://gitcode.com/gh_mirrors/hexapod5/hexapod 你是否梦想过亲手制作一台能够灵活行走、稳定爬行的六足机器人?想要体验机器人制作的乐趣,却担…...
医学图像分类实战:基于kvasir v2胃病数据集的深度卷积网络性能对比
1. 医学图像分类与KVASIR V2数据集简介 胃镜图像分类是计算机辅助诊断系统中的关键环节。KVASIR V2作为目前最全面的公开胃病数据集,包含8类常见胃部病变的8000张高清图像,每类1000张。这些图像由专业胃肠病专家标注,覆盖了从正常黏膜到早期…...
python基于微信小程序的直播带货商品数据分析系统的爬虫可视化
目录需求分析与系统架构设计微信小程序数据爬取方案数据存储与清洗数据分析与可视化系统集成与部署注意事项项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与系统架构设计 明确系统目标为爬取微信小程序直播带货商品数…...
WSABuilds系统调用:Windows与Android内核交互机制解析
WSABuilds系统调用:Windows与Android内核交互机制解析 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root sol…...
OpenClaw云端体验方案:Qwen3.5-9B镜像免安装调试技巧
OpenClaw云端体验方案:Qwen3.5-9B镜像免安装调试技巧 1. 为什么选择云端沙盒方案? 上周我尝试在本地笔记本部署OpenClaw时,遭遇了Python版本冲突、CUDA驱动不兼容等一系列问题。作为一个经常需要快速验证技术方案的开发者,这种环…...
OpenClaw技能扩展:安装百川2-13B-4bits专用插件提升自动化能力
OpenClaw技能扩展:安装百川2-13B-4bits专用插件提升自动化能力 1. 为什么需要为OpenClaw安装专用插件 去年冬天,我在处理一批技术文档归档任务时,发现OpenClaw的基础能力虽然强大,但在处理特定领域内容时总有些力不从心。比如让…...
Anaconda+AKShare保姆级教程:5分钟搞定Python量化环境(附常见报错解决方案)
AnacondaAKShare极速配置指南:零基础搭建Python量化环境全攻略 刚接触量化投资的新手们,往往在第一步——环境搭建上就卡壳了。明明跟着教程一步步操作,却总是遇到各种报错提示,让人望而生畏。本文将手把手带你用Anaconda和AKSha…...
HunyuanVideo-Foley保姆级教程:从零部署到音效生成的5个关键步骤
HunyuanVideo-Foley保姆级教程:从零部署到音效生成的5个关键步骤 1. 环境准备与镜像部署 1.1 硬件要求检查 在开始部署前,请确保您的设备满足以下最低配置要求: 显卡:NVIDIA RTX 4090/4090D(24GB显存)内…...
别再只会用PS修图了!用Python的Richardson-Lucy算法,5分钟搞定模糊老照片修复
用Python拯救模糊老照片:零基础也能上手的Richardson-Lucy算法实战 翻箱倒柜找到一张泛黄的老照片,却发现画面模糊得连人脸都看不清?别急着叹气,更不用花大价钱找专业修图师。今天我要分享一个连Python新手都能轻松上手的黑科技—…...
Python实战:5分钟搞定小红书自动点赞脚本(附完整代码)
Python实战:5分钟实现小红书自动化互动工具开发指南 在当今内容爆炸的时代,社交媒体运营已成为个人品牌和商业推广的重要阵地。小红书作为国内领先的生活方式分享平台,其互动数据直接影响内容曝光和账号权重。对于开发者而言,掌握…...
