gRPC in ASP.NET Core 3.x - gRPC 简介(1)

gRPC的结构 

在我们搭建gRPC通信系统之前,首先需要知道gRPC的结构组成。 

首先,需要一个server(服务器),它用来接收和处理请求,然后返回响应。 

既然有server,那么肯定有client(客户端),client的作用就是向server发送请求,具体就是生成一个请求,然后把它发送到server,然后等待server的响应。 

但是它们不必是一对一的关系,在整个系统里,可以有多个server,也可以有多个client。根据实际情况,一个应用程序可能是gRPC的server,也可能是gRPC的client,也可能两者都是。 

 

gRPC里面server和client并不是直接通信的,gRPC可以使用protocol buffer定义的消息来生成代码。 

当client发送请求的时候,它会和server端生成的代码进行交互;同样在client端也有生成的代码,client端生成的代码负责提供一个隧道,这个隧道被用来把client端生成的消息发送给server。 

因为server和client两端都有生成的代码,所以如何序列化和反序列化,以及如何进行来回的传输等细节,我们都可以不了解。 

 

但是为了让server和client端来回传输通信,我们还需要一个协议,传输协议就负责把消息来回的传递。所以它并不需要懂得这些消息的内容,生成的代码会负责理解这些消息,但是传输协议需要负责把消息从一端传递到另一端。 

目前,好像gRPC只能使用Protocol Buffer这一个传输协议。但是gRPC在设计的时候,它的传输层是可插拔的,所以如果我们想把Protocol Buffer使用某种JSON或XML的协议替换掉,是可行的。如果你有特定的需求使用Protocol Buffer无法实现的话,那么你也可以创建自己的传输协议。 

 

设计步骤 

总共应该分三步。设计原则是从里到外(看上面结构图)。 

所以: 

  1. 首先我们应该定义消息(message)。这些消息使用Protocol Buffer来进行定义 

  2. 定义完消息,我们使用Proto-c编译器来生成server和client端的代码,它们会负责把消息在两端之间来回传递 

  3. 现在,我们就可以写client和server了。 

 

 

gRPC 生命周期 

 

 

gRPC或者RPC的生命周期可以参考上图。 

首先,需要创建一个隧道,该隧道会包装实际用来传输消息的线路协议。 

例如如果我们的server和client之间使用HTTP/2协议,那么这个隧道就会包装一个server和client之间的TCP连接。 

这些隧道的优点是,它们只需要创建一次。一旦隧道创建了,你就可以在你应用程序的生命周期之内持续的使该隧道来回发送消息。 

 

隧道建立好之后,就该创建client了。client也是可以复用的,不必每个rpc调用都重建client。但是在调用之前,我们需要把client建立好。 

现在client进入隧道,这个client通常是提供给我们的,我们不需要自己实现任何代码。使用Proto-c编译消息定义生成的代码将会给我们提供client需要的一切。我们只需要提供隧道即可。 

 

client创建好之后,client就准备好给server发送请求了。这一步是必须的,gRPC无法让server端初始化请求发送给client端,请求都是client端初始化的。 

但是client初始化请求之后,server端是可以发送多个响应回来的,这个以后再说。这时,client可以随着请求发送一些metadata(元数据),这些metadata是关于请求的,但不是请求对象本身。 

 

请求被发送以后呢,server可以(但不是必须)把metadata返回。所以,你实际上可以在client和server之间进行这种“预约对话”。client可以发送一些metadata,然后server可以把一些metadata发送回来,这些都是发生在server开始处理请求之前。 

 

生命周期的最后一部分就是发送和接收消息。就以简单的情况为例,现在server就应该把响应发送回去了,因为client已经发送了请求,所以响应就是要返回。 

 

注意,关于metadata需要注意的是,gRPC内置的身份认证系统是用来做client和server的身份认证的。 

但是这个metadata也为你提供了检查实际用户身份的机制。所以,如果你需要认证或者授权实际用户,就需要在RPC请求这个级别来实现。也就是在这里。 

如果是client和server的身份认证,以后再写。。

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

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

相关文章

arcgis 获取json经纬度_干货|ArcGIS的矢量化操作——ArcGis中进行地形图的配准

1.1.1方法简介1.1.1.1所有图件扫描后都必须经过扫描纠正,对扫描后的栅格图进行检查,以确保矢量化工作顺利进行。对影像的配准有很多方法,下面介绍一种常用方法。(1)打开 ArcMap,增加 Georeferncing 工具条。(2)把需要进行纠正的影…

使用ASP.NET Core构建RESTful API的技术指南

译者荐语:利用周末的时间,本人拜读了长沙.NET技术社区翻译的技术文章《微软RESTFul API指南》,打算按照步骤写一个完整的教程,后来无意中看到了这篇文章,与我要写的主题有不少相似之处,特意翻译下来。原文来…

查询ecshop网站代码排查方法_提升网站访问速度,提升网站访问速度,提升网站访问速度的个人经验分享...

一、前言网站打开慢这个问题,算是老生常谈了,在实际的生产的环境中,我们会经常遇到这样的问题。作为一个运维工程师,我们该从哪些角度去分析问题,判断问题,并最终解决问题。那么首先我会从几个方面分析这个…

dotnet 手工打一个 dotnet tool 包

现在依靠 dotnet 平台,可以方便分发工具,利用 NuGet 服务进行分发和使用工具。打一个 dotnet tool 包,可以将这个包上传到 NuGet 上,小伙伴通过和安装 NuGet 相同方式就可以将工具安装在本机上。本文将告诉大家如何手工打一个 dot…

漫谈Linux文档属性、拥有者、群组、权限

作者:justmine头条号:大数据与云原生微信公众号:大数据与云原生创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。为了方便阅读,微信公众号已按分类排版,后续的文章…

java foreach跳出本次循环_Java中提供三种常用的循环语句

开发工具与关键技术:MyEclipse 10,java作者:刘东标循环语句:满足一定条件的情况下反复执行一个操作。Java中提供三种常用的循环语句:1.while循环语句while先判断为真,再执行while循环语句,如果条件为假&…

如何学习WPF技术?

本文由长沙DotNET技术社区【邹溪源】整理,共有7544字,阅读需耗时15分钟。引言在桌面开发领域,虽然在某些领域,基于electron的跨平台方案能够为我们带来某些便利,但是由于WPF技术能够更好的运用Direct3D带来的性能提升、…

java爬取网页数据_如何使用爬虫工具采集数据

网络爬虫是一种按照一定规则,自动抓取万维网数据的脚本。按照一定规则,指的是爬虫程序需要解析网页的dom结构,针对dom结构爬取自己感兴趣的数据。(图1)这就是一个网页源码的dom结构,我们需要一级一级指定抓取的标签,如下图:(图2)图…

gRPC in ASP.NET Core 3.x - gRPC 简介(2)

前一篇:gRPC in ASP.NET Core 3.x - gRPC 简介(1)身份认证这里指的不是用户的身份认证,而是指多个server和client之间,它们如何识别出来谁是谁,并且能安全的进行消息传输。在身份认证这方面,gRP…

.NET Core开发实战(第8课:配置框架:让服务无缝适应各种环境)--学习笔记

08 | 配置框架:让服务无缝适应各种环境配置是应用程序发布到各种环境的必备能力,这一节开始详细讲解 ASP.NET Core 的配置框架配置框架的核心包有两个,一个抽象包,一个实现包Microsoft.Extensions.Configuration.AbstractionsMicr…

【译】探索更轻量的Electron替代品来托管Blazor桌面应用程序

本文翻译自 ASP.NET 项目组的 Steve Sanderson 的博客,发表于 2019 年 11 月 1 日。Steve Sanderson 是 Blazor 最早的创造者。这篇文章发布后还有一篇后续,是介绍一个在本文提到的跨平台 webview 概念的落地项目 WebWindow ,我也会接着翻译过…