【grpc】二、grpc入门,基本使用方法

上篇介绍了使用protobuf生成grpc相关代码,并实现了服务端方法,本篇介绍下具体的使用。

一、服务端

// server.gopackage mainimport ("google.golang.org/grpc""grpcDemo/calc""net"
)func startServer(addr string) {// 监听端口ls, err := net.Listen("tcp", addr)if err != nil {panic(err)}defer ls.Close()// 创建grpc服务gServer := grpc.NewServer()// 注册rpccalc.RegisterCalcServer(gServer, &calc.Server{})if err = gServer.Serve(ls); err != nil {panic(err)}
}

服务端开启方法主要包含三个步骤:

  1. 开启监听端口;
  2. 调用grpc.NewServer创建grpc服务;
  3. 调用生成的包注册rpc服务。

二、客户端

// client.go
package mainimport ("context""fmt""google.golang.org/grpc""google.golang.org/grpc/credentials/insecure""grpcDemo/calc"
)func clientTest(addr string) {// 创建rpc连接cc, err := grpc.NewClient(addr,grpc.WithTransportCredentials(insecure.NewCredentials()))if err != nil {panic(err)}defer cc.Close()// 创建rpc调用客户端cli := calc.NewCalcClient(cc)// 调用具体的rpc方法versionRsp, err := cli.Version(context.Background(), &calc.Empty{})if err != nil {panic(err)}fmt.Println("server version:", versionRsp.GetStr())sumRsp, err := cli.Sum(context.Background(), &calc.CalcRequest{A: 1,B: 2,})fmt.Println("1+2=", sumRsp.GetNum())
}

客户端使用方法也分为三个步骤:

  1. 调用grpc.NewClient创建grpc连接(这里有一点需要注意,grpc强制需要鉴权配置,否则会报错。但是目前没有做鉴权,传入的是grpc.WithTransportCredentials(insecure.NewCredentials()),后续会介绍生产环境中鉴权如何配置);
  2. 调用生成的包创建rpc客户端;
  3. 调用具体的rpc方法。

三、运行结果
目前代码结构如下
在这里插入图片描述

// main.go
package mainimport ("time"
)func main() {go startServer(":8080")// 确保服务开起来time.Sleep(time.Second)clientTest("localhost:8080")
}

这里有个需要注意的点,因为client.gomain.goserver.go 都是在 main 包下面的,在运行配置那里需要把这三个文件都加上去,如下所示:
在这里插入图片描述

最终运行效果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/601907.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙ArkUI声明式学习:【UI资源管理】

OpenHarmony 应用的资源分类和资源的访问以及应用开发使用的像素单位以及各单位之间相互转换的方法。 资源分类 移动端应用开发常用到的资源比如图片,音视频,字符串等都有固定的存放目录,OpenHarmony 把这些应用的资源文件统一放在 resourc…

javaWeb物流信息网的设计与实现

摘要 本文讲述了基于JSP物流信息网的设计与实现。该系统使用java语言开发,使系统具有更好的平台性和可扩展性。 该系统实现了用户登录、注册、查询快递信息、快递公司注册成为合作伙伴以及系统管理员对信息进行管理等功能。系统的主要界面会将所有的服务排列好&…

AI资讯2024-04-08 | 斯坦福大学推出手机端运行大模型—Octopus v2,性能超越GPT-4

关注文章底部公众号可获取每日AI新闻,还有更多好玩使用的黑科技工具分享 斯坦福大学推出可在手机端运行大模型—Octopus v2 Octopus-V2-2B 是一个拥有 20 亿参数的开源语言模型,专为 Android API 量身定制,旨在在 Android 设备上无缝运行,并将实用性扩展到从 Android 系统…

【学习】移动端App性能测试流程有哪些

移动端App性能测试是保证App性能表现的重要环节之一。随着移动设备的普及和移动互联网的发展,移动端App的性能测试变得越来越重要,通过科学合理的性能测试可以发现并解决潜在的性能问题优化App运行效果提高用户体验。性能测试旨在评估App在各种场景下的性…

射影几何基础

射影几何基础 文章目录 射影几何基础2D2D点2D直线二次曲线 3D3D点3D 平面3D直线 2D 2D点 欧氏空间中的笛卡尔坐标,缩放、旋转和仿射变换能表示成矩阵运算(线性) ; 但平移变换和透视投影不能表示成矩阵相乘。所以为了解决这个问题…

2024年最新可用免费云服务器整理汇总

随着云计算技术的不断发展,越来越多的个人和企业开始使用云服务器来满足其数据存储、网站搭建、应用开发等需求。其中,免费云服务器更是受到广大用户的青睐。本文将为大家整理汇总最新的可用免费云服务器资源,助力大家轻松享受云上之旅&#…

mos管开关出现尖峰的原理? mos管开关的时候cs会出现尖峰,请问这是什么原因?

MOS管在开关过程中出现尖峰现象,通常是由于电路中的寄生参数和快速电压变化引起的。以下是一些导致尖峰出现的主要原因和原理: 寄生电容 在MOS管的源极(S)和漏极(D)之间存在寄生电容,这个电容在…

CSS变换

CSS变换 根据 CSS 的变换的功能特性,它可以分为位移、旋转、缩放、倾斜和透视: 也可以分成2D变换和3D变换,2D变换是二维平面上进行的,即 X 轴和 Y 轴。这些变换不涉及 Z 轴。3D 变换允许元素在三维空间中进行操作,这些…

BioXCell,1H6--InVivoMAb anti-canine CD34

1H6单克隆抗体与犬CD34发生反应。CD34是一种I型单体唾液酸粘蛋白样糖蛋白,存在于许多干细胞群体中。CD34由骨髓和外周血中的造血祖细胞以及一些间充质干细胞、基质细胞、胚胎成纤维细胞、肿瘤细胞和成人血管内皮细胞表达。CD34经常被用作量化用于造血干细胞移植后该…

【第二十九篇】BurpSuite杂项综合

文章目录 Intruder模块URL编码Grep检索提取logger日志模块Intruder模块URL编码 假设我们需要对GET请求包中的URL目录进行爆破FUZZ: example.com/xxxx(文件名)Intruder模块会自动对我们的文件名字典进行URL编码 例如payload为1.txt时,burp对其进行URL编码并连接到example.c…

vulhub之fastjson篇-1.2.27-rce

一、启动环境 虚拟机:kali靶机:192.168.125.130/172.19.0.1(docker地址:172.19.0.2) 虚拟机:kali攻击机:192.168.125.130/172.19.0.1 本地MAC:172.XX.XX.XX 启动 fastjson 反序列化导致任意命令执行漏洞 环境 1.进入 vulhub 的 Fastjson 1.2.47 路径 cd /../../vulhub/fa…

代码算法训练营day13 | 239. 滑动窗口最大值、347.前 K 个高频元素

day13: 239. 滑动窗口最大值1、(暴力算法)思路:2、(单调队列)思路: 347.前 K 个高频元素 239. 滑动窗口最大值 题目链接 状态:暴力ok 文档:programmercarl.com 1、(暴力算…