.net gRPC初探 - 从一个简单的Demo中了解并学习gRPC
一、.NET 上的 gRPC 的简介
gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架。
gRPC 的主要优点是:
- 现代高性能轻量级 RPC 框架。
- 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现。
- 可用于多种语言的工具,以生成强类型服务器和客户端。
- 支持客户端、服务器和双向流式处理调用。
- 使用 Protobuf 二进制序列化减少对网络的使用。
这些优点使 gRPC 适用于:
- 效率至关重要的轻量级微服务。
- 需要多种语言用于开发的 Polyglot 系统。
- 需要处理流式处理请求或响应的点对点实时服务。
二、从一个简单的Demo中了解并学习gRPC
1、创建gRPC服务端
1)新建一个gRPC项目

2)新建好的初试gRPC项目结构如下

3)proto文件

4) 服务:proto中的方法具体实现 
5) proto会自动生成两个类文件,保存proto重新生成即可

6)在项目的工程文件中(.csproj)可以看到此时的文件情况

7)开始自己新建上述文件
① 首先新建一个proto文件
添加新项,选择协议缓冲区文件

② 更改新建proto文件的属性
点击项目初始化的greet.proto文件可以看到其属性

根据初始文件更改我们新建的people.proto文件的属性,注意:生成操作选择[Protobuf compiler]

gRPC Stub Classes 生成操作选择[Server only]

③ 此时,查看工程文件可以看到我们新建文件及其属性设置:和初始文件一样是一个服务器端的协议缓冲区文件

④ 按照greet.proto更改people.proto文件,编写服务,增加一个查询方法,并定义其请求类和响应类
注意:这里的int类型不同于.net代码中的int类型,短整型用int32表示,长整型用int64表示
⑤ 保存并生成people.proto文件,可以看到此时也生成了两个people.proto的类文件

⑥ 实现上述的服务:查询方法

注:这里的People.PeopleBase是由people.proto自动生成的类文件中的基类
⑦ 在Startup.cs中注册我们编写的服务

⑧ 至此,服务端新建完成

2、创建gRPC客户端
1)在解决方案上右键新建一个控制台程序
2)在NuGet程序包管理器中添加如下程序包

3)把服务端的proto文件拷贝过来

4)更改两个proto文件的gRPC Stub Classes属性为[Client only],查看客户端程序的工程文件即可看到更新

5)客户端也生成了两个proto的类文件

6)编写基于https的请求测试代码
7)设置解决方案的多启动项目,使得服务端客户端同时运行
8)运行,查看测试调用结果

至此,gRPC服务与客户端的新建及其简单的调用完成
三、总结
上述内容对gRPC做了一个简单的连接,并根据一个demo学习理解gRPC服务端、客户端的通信,进一步体验这种高性能轻量的内部服务调用模式。
想要更详细全面进一步的学习gRPC,本文在此推荐一个博主写的文章,特别通俗易懂而且全面,
另外,微软官方给出的关于gRPC学习的地址:远程过程调用应用
关于.NET Core整体的学习,作者有一篇文章进行了详细介绍:ASP.NET Core开发者指南(2022版路线图)
希望一起学习,一起进步!
以上就是.net gRPC初探 - 从一个简单的Demo中了解并学习gRPC的介绍,做此记录,如有帮助,欢迎点赞关注收藏!
.net gRPC初探 - 从一个简单的Demo中了解并学习gRPC的更多相关文章
- MyBatis 学习记录1 一个简单的demo
主题 最近(N个月前)clone了mybatis的源码..感觉相比于spring真的非常小...然后看了看代码觉得写得很精简...感觉我的写代码思路和这个框架比较相似(很难具体描述...就是相对来说比 ...
- 无废话WCF入门教程六[一个简单的Demo]
一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...
- [小北De编程手记] Lesson 01 - AutoFramework构建 之 从一个简单的Demo聊起
写在最前面 这个系列的主旨是要跟大家分享一下关于自动化测试框架的构建的一些心得.这几年,做了一些自动化测试框架以及团队的构建的工作.过程中遇到了很多这样的同学,他们在学习了某一门语言和一些自动化测试的 ...
- Spring Boot应用连接数据库MySQL、及一个简单的demo
一.修改pom.xml文件 在项目的pom.xml文件上增加如下代码,添加依赖文件. <dependency> <groupId>mysql</groupId> & ...
- 【转】WCF入门教程六[一个简单的Demo]
一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...
- 学习LSM(Linux security module)之二:编写并运行一个简单的demo
各种折腾,经过了一个蛋疼的周末,终于在Ubuntu14.04上运行了一个基于LSM的简单demo程序. 一:程序编写 先简单的看一下这个demo: //demo_lsm.c#include <l ...
- 一个简单的demo学习Android远程Service(AIDL的使用)
这是milo很早之前写在论坛上的一个帖子,现在整理出来,milo也复习一下一般来说Android 的四大组件都是运行在同一个进程中的,但远程Service运行在不同的进程里.这进程间的通信是使用了An ...
- 根据Mob官网的天气预报接口写了一个简单的demo
第一步 自己注册一个应用,然后获取里面的 App Key,下载MobAPI SDK 然后拖入 MobAPI.framework 和 MOBFoundation.framework 到你的项目中 第二步 ...
- hammer.js方法总结(只做了一个简单的demo)
html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- CXF webservice 一个简单的demo
新建一个maven项目(or下载cxf所需jar包),pom.xml如下 1.pom.xml <project xmlns="http://maven.apache.org/POM/4 ...
随机推荐
- Windows Server 2019 安装 Oracle 19C RAC(VMWare虚拟机环境)
软件 Windows Server 2019 Standard Oracle 19C Oracle Grid 19 VMware Workstation 16 规划 共享存储,使用Windows Se ...
- 基于python的数学建模---pulp库
instance 代码: import pulp z = [2, 3, 1] a = [[1, 4, 2], [3, 2, 0]] b = [8, 6] aeq = [[1,2,4]] beq = [ ...
- 篇(16)-Asp.Net Core入门实战-权限管理之用户创建与关联角色(ViewModel再用与模型验证二)
入门实战-权限管理之用户创建与关联角色(ViewModel再用与模型验证二) (1).在用户管理着模块中,相比较菜单功能的代码还是比较多的,设计到用户的创建,修改,角色变更和密码重置,同时都集中在列表 ...
- 使用 Rainbond 搭建本地开发环境
在开发之前,你需要在本地安装各种开发工具和服务,比如:Mysql.Redis.Nacos 等等,我们都知道在个人电脑上安装这些服务相当的繁琐,可能会遇到很多问题,环境问题.依赖问题等等. 在需要团队协 ...
- 推荐一款采用 .NET 编写的 反编译到源码工具 Reko
今天给大家介绍的是一款名叫Reko的开源反编译工具,该工具采用C#开发,广大研究人员可利用Reko来对机器码进行反编译处理.我们知道.NET 7 有了NativeAOT 的支持,采用NativeAOT ...
- 【Scala】上:学习文档、文章、思维导图
〇.可查阅资料 1.文档 英文文档:https://tool.oschina.net/apidocs/apidoc?api=scala-docs-2.9.2 与java:https://docs.sc ...
- SQL语句筛选/查询
目录 SQL语句查询关键词 查询关键字之where筛选 查询关键字之分组 group by Group_concat 方法 查询关键字之having过滤 查询关键字之去重distinct 关键字之or ...
- nuxt.js实现页面刷新功能
key 属性Key:String 或者Function key属性赋值到<router-view>,这对于在动态页面和不同路径中进行转换很有用.不同的key会使页面组件重新渲染. 设置ke ...
- C/C++语言 MD5例子
之前研究了一下在C中进行MD5加密,由于找了很久没有找到现成的库文件,所以所幸自己去写了一下.个人感觉C的便捷性没有Python好的原因就是这里. 下面是我写的一个例子. mian.cpp: 点击查看 ...
- Java基础篇——注解和反射
注解 注解Annotation可以被其他程序(编译器)读取,常见的有@override 内置注解 @Override 适用于修饰方法,表明重写父类中的一个方法 @Deprecated 用于修饰类.方法 ...