一、.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,本文在此推荐一个博主写的文章,特别通俗易懂而且全面,

地址:.NET Core(.NET6)中gRPC使用

另外,微软官方给出的关于gRPC学习的地址:远程过程调用应用

关于.NET Core整体的学习,作者有一篇文章进行了详细介绍:ASP.NET Core开发者指南(2022版路线图)

希望一起学习,一起进步!

以上就是.net gRPC初探 - 从一个简单的Demo中了解并学习gRPC的介绍,做此记录,如有帮助,欢迎点赞关注收藏!

.net gRPC初探 - 从一个简单的Demo中了解并学习gRPC的更多相关文章

  1. MyBatis 学习记录1 一个简单的demo

    主题 最近(N个月前)clone了mybatis的源码..感觉相比于spring真的非常小...然后看了看代码觉得写得很精简...感觉我的写代码思路和这个框架比较相似(很难具体描述...就是相对来说比 ...

  2. 无废话WCF入门教程六[一个简单的Demo]

    一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...

  3. [小北De编程手记] Lesson 01 - AutoFramework构建 之 从一个简单的Demo聊起

    写在最前面 这个系列的主旨是要跟大家分享一下关于自动化测试框架的构建的一些心得.这几年,做了一些自动化测试框架以及团队的构建的工作.过程中遇到了很多这样的同学,他们在学习了某一门语言和一些自动化测试的 ...

  4. Spring Boot应用连接数据库MySQL、及一个简单的demo

    一.修改pom.xml文件 在项目的pom.xml文件上增加如下代码,添加依赖文件. <dependency> <groupId>mysql</groupId> & ...

  5. 【转】WCF入门教程六[一个简单的Demo]

    一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...

  6. 学习LSM(Linux security module)之二:编写并运行一个简单的demo

    各种折腾,经过了一个蛋疼的周末,终于在Ubuntu14.04上运行了一个基于LSM的简单demo程序. 一:程序编写 先简单的看一下这个demo: //demo_lsm.c#include <l ...

  7. 一个简单的demo学习Android远程Service(AIDL的使用)

    这是milo很早之前写在论坛上的一个帖子,现在整理出来,milo也复习一下一般来说Android 的四大组件都是运行在同一个进程中的,但远程Service运行在不同的进程里.这进程间的通信是使用了An ...

  8. 根据Mob官网的天气预报接口写了一个简单的demo

    第一步 自己注册一个应用,然后获取里面的 App Key,下载MobAPI SDK 然后拖入 MobAPI.framework 和 MOBFoundation.framework 到你的项目中 第二步 ...

  9. hammer.js方法总结(只做了一个简单的demo)

    html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...

  10. CXF webservice 一个简单的demo

    新建一个maven项目(or下载cxf所需jar包),pom.xml如下 1.pom.xml <project xmlns="http://maven.apache.org/POM/4 ...

随机推荐

  1. mindxdl--common--http_handler.go

    // Copyright (c) 2021. Huawei Technologies Co., Ltd. All rights reserved.// Package common this file ...

  2. BFS和DFS学习笔记

    1 算法介绍 1.1 BFS Breadth First Search(广度优先搜索),将相邻的节点一层层查找,找到最多的 以上图为例,首先确定一个根节点,然后依次在剩下的节点中找已找出的节点的相邻节 ...

  3. kettel

    下载教程:(目前最高版本7.1) 1.网址:https://community.hitachivantara.com/docs/DOC-1009855 2.

  4. Nginx rewrite 详解

    Nginx rewrite 详解 本篇主要介绍 nginx 的 rewrite 重定向这个功能进行 详解介绍, 以及介绍它的使用场景 1. rewrite 基本介绍 rewrite是实现URL重写的关 ...

  5. 关于解决pip安装python第三方库超时的问题

    直接换源下载 1. 设置超时时间,安装txt 文件内安装包 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-time ...

  6. Vue DevUI v1.4 版本发布:从体验、效率、质量三个方面做了全方位的优化🎉

    2022年9月1日,我们正式宣布 Vue DevUI 组件库发布 v1.0 版本. Vue DevUI 1.0 正式发布 经过100多天的持续迭代,我们正式发布 v1.4.0 版本,共新增: 11位贡 ...

  7. 【ASP.NET Core】MVC操作方法如何绑定Stream类型的参数

    咱们都知道,MVC在输入/输出中都需要模型绑定.因为HTTP请求发送的都是文本,为了使其能变成各种.NET 类型,于是在填充参数值之前需 ModelBinder 的参与,以将文本转换为 .NET 类型 ...

  8. 分布式注册服务中心etcd在云原生引擎中的实践

    作者:王雷 etcd是什么 etcd是云原生架构中重要的基础组件,由CNCF孵化托管.ETCD是用于共享配置和服务发现的分布式,一致性的KV存储系统,是CoreOS公司发起的一个开源项目,授权协议为A ...

  9. js修改数组中的属性名

    将数组 [{id:"1",name:"AAA"}] 修改为 ===> [{id:"1",text:"AAA",va ...

  10. 手写Pinia存储的数据持久化插件

    Pinia和Vuex的通病 Pinia和vuex的通病就是,页面刷新会导致数据丢失 解决通病 一.新建store import { defineStore } from 'pinia' //单独存放S ...