gRPC in ASP.NET Core 3.x - gRPC 简介
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无法实现的话,那么你也可以创建自己的传输协议。
设计步骤
总共应该分三步。设计原则是从里到外(看上面结构图)。
所以:
首先我们应该定义消息(message)。这些消息使用Protocol Buffer来进行定义
定义完消息,我们使用Proto-c编译器来生成server和client端的代码,它们会负责把消息在两端之间来回传递
现在,我们就可以写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的身份认证,以后再写。。
身份认证
- 不采取任何措施的连接,也就是不安全的连接。
- TLS/SSL 连接。
- 基于 Google Token 的身份认证。
- 自定义的身份认证提供商。
消息传输类型
- 第一种是一元的消息,就是简单的请求--响应。
- 第二种是server streaming(流),server会把数据streaming回给client。
- 第三种是client streaming,也就是client会把数据streaming给server。
- 最后是双向streaming。
一元消息
Server Streaming
Client Streaming
双向Streaming
gRPC in ASP.NET Core 3.x - gRPC 简介的更多相关文章
- ASP.NET Core 3.0 gRPC 双向流
目录 ASP.NET Core 3.0 使用gRPC ASP.NET Core 3.0 gRPC 双向流 ASP.NET Core 3.0 gRPC 认证授权 一.前言 在前一文 <ASP.NE ...
- ASP.NET Core 3.0 gRPC 拦截器
目录 ASP.NET Core 3.0 使用gRPC ASP.NET Core 3.0 gRPC 双向流 ASP.NET Core 3.0 gRPC 拦截器 一. 前言 前面两篇文章给大家介绍了使用g ...
- ASP.NET Core 3.0 gRPC 身份认证和授权
一.开头聊骚 本文算是对于 ASP.NET Core 3.0 gRPC 研究性学习的最后一篇了,以后在实际使用中,可能会发一些经验之文.本文主要讲 ASP.NET Core 本身的认证授权和gRPC接 ...
- gRPC in ASP.NET Core 3.x -- Protocol Buffer(2)Go语言的例子(下)
第一篇文章(大约半年前写的):https://www.cnblogs.com/cgzl/p/11246324.html gRPC in ASP.NET Core 3.x -- Protocol Buf ...
- gRPC在 ASP.NET Core 中应用学习(二)
前言: 上一篇文章中简单的对gRPC进行了简单了解,并实现了gRPC在ASP.NET Core中服务实现.客户端调用:那么本篇继续对gRPC的4中服务方法定义.其他使用注意点进一步了解学习 一.gRP ...
- asp.net core 3.0 gRPC框架小试
什么是gRPC gRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,采用ProtoBuf 定义的IDL. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优 ...
- ASP.NET Core 3.0 gRPC 配置使用HTTP
前言 gRPC是基于http/2,是同时支持https和http协议的,我们在gRPC实际使用中,在内网通讯场景下,更多的是走http协议,达到更高的效率,下面介绍如何在 .NET Core 3.0 ...
- gRPC在 ASP.NET Core 中应用学习
一.gRPC简介: gRPC 是一个由Google开源的,跨语言的,高性能的远程过程调用(RPC)框架. gRPC使客户端和服务端应用程序可以透明地进行通信,并简化了连接系统的构建.它使用HTTP/2 ...
- ASP.NET Core 企业级开发架构简介及框架汇总
企业开发框架包括垂直方向架构和水平方向架构.垂直方向架构是指一个应用程序的由下到上叠加多层的架构,同时这样的程序又叫整体式程序.水平方向架构是指将大应用分成若干小的应用实现系统功能的架构,同时这样的系 ...
随机推荐
- vs推送git失败,修改git下config的Log
一开始写完程序套推送到Git中,然后就来了一下,下面的异常: 异常1 发布到远程存储库时遇到错误: Git failed with a fatal error. fatal: HttpRequestE ...
- 用ModelAndView返回视图结果返回的是对应RequestMapping拼接的路径
今天,遇到一个贼坑的问题,就是我明明可以将逻辑视图名视图存入ModelAndView,结果返回的页面信息是RequestMapping拼接的视图解析路径,最后经过检查多遍代码,发现原来是ModelAn ...
- 异数OS 织梦师-水桶(三)-- RAM共享存储方案
. 异数OS 织梦师-水桶(三)– RAM共享存储方案 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652455 ...
- 把 CPU “玩”起来
前言 从开始学习编程之后,就渐渐痴迷于技术,平时遇到购书满减活动时就忍不住买一堆书.前两天闲着无聊,翻开了去年买的<编程之美>,目录里的“让 CPU 占用率听你指挥”吸引力我的眼球.这一年 ...
- [题解][Codeforces]Good Bye 2019 简要题解
构造题好评,虽然这把崩了 原题解 A 题意 二人游戏,一个人有 \(k_1\) 张牌,另一个人 \(k_2\) 张,满足 \(2\le k_1+k_2=n\le 100\),每张牌上有一个数,保证所有 ...
- 高通量计算框架HTCondor(二)——环境配置
目录 1. 概述 2. 安装 3. 结果 4. 相关 1. 概述 HTCondor是开源跨平台的分布式计算框架,在其官网上直接提供了源代码和Windows.Linux以及MacOS的安装包.因为平台限 ...
- 实验四:划分多个VLAN
1.配置图 2.配置命令 Switch1.Switch2.Switch3的配置是一样的,如下所示:(可直接复制交换机,可以只配置一次) 通过命令查看配置: Switch0的配置如下: 通过命令查看tr ...
- idea中当前模块资源目录上显示属于其他模块
一.错误的2个显示 1.错误显示 src/main目录下的java和resources本来属于cloud-consumer-dept-feign模块 但是在src/main/java却是显示src/m ...
- 玩转Django2.0---Django笔记建站基础十(二)(常用的Web应用程序)
10.3 CSRF防护 CSRF(跨站请求伪造)也成为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,窃取网站的用户信息来制作 ...
- Macbook 安装 opencv(cv2) 及在pycharm 下的使用
python和opencv的安装都很顺利,就是在PyCharm下的配置浪费了一点时间. 一.原料 1.max系统 2.python(本文用的版本是3.6.5) 3.opencv(本文中使用的版本是3. ...