.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 ...
随机推荐
- 秦皇岛2020CCPC补题
秦皇岛2020CCPC A,E,F,G,I,K A. A Greeting from Qinhuangdao 知识点:简单题 复杂度:\(O(logn)\) #include<bits/stdc ...
- i春秋Do you know upload?
打开题目是一个文件上传,就先写了一个一句话木马的php文件,直接提交显示文件类型不允许.于是乎将其改为jpeg格式上传,成功了,但是没用,菜刀连不上.再次上传jpg格式的一句话木马(写好php木马后将 ...
- float16与float32转换
// based on https://gist.github.com/martin-kallman/5049614 // float32 // Martin Kallman // // Fast h ...
- Mybatis——Plus :表与表之间的关系:1对多和多对一
Mybatis--plus我大致整理出两种方案: 第一种:第三方mybatis-plus 插件,注解式开发 Mybatis-Plus-Relation ( mprelation ) : mybatis ...
- qtCreator警告解决
警告 qtCreator Warning: QT_DEVICE_PIXEL_RATIO is deprecated. Instead use: QT_AUTO_SCREEN_SCALE_FACTOR ...
- 高效率开发Web安全扫描器之路(一)
一.背景 经常看到一些SRC和CNVD上厉害的大佬提交了很多的漏洞,一直好奇它们怎么能挖到这么多漏洞,开始还以为它们不上班除了睡觉就挖漏洞,后来有机会认识了一些大佬,发现它们大部分漏洞其实是通过工具挖 ...
- Python3.7.3安装TensorFlow和OpenCV3
根据python的版本进行下载相应的文件 一.安装TensorFlow 进入网址https://pypi.org/project/tensorflow/#files下载TensorFlow文件 进入下 ...
- 环境安装-Centos7.4安装及配置
环境安装-Centos7.4安装及配置 〇.资料汇总 一.虚拟机安装 1.下载地址 https://pan.baidu.com/s/1zcOp06HX4OxPdsCCGkHbXQ 提取码:7777 2 ...
- MIT6.828学习笔记3(Lab3)
Lab 3: User Environments 在这个lab中我们需要创建一个用户环境(UNIX中的进程,它们的接口和实现不同),加载一个程序并运行,并使内核能够处理一些常用的中断请求. Part ...
- 对于async和await的使用方式、作用效果不怎么理解 ?没关系,初步看这篇就够了
结论 同步还是异步,区别如下: 同步:你使用 await 修饰符去调用一个异步(async)方法(是异步方法,不过是阻塞式的,可简单理解为同步): 异步:你获取异步方法返回的 Task,就是异步(后文 ...