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无法实现的话,那么你也可以创建自己的传输协议。
设计步骤
总共应该分三步。设计原则是从里到外(看上面结构图)。
所以:
首先我们应该定义消息(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的身份认证,以后再写。。
gRPC in ASP.NET Core 3.x - gRPC 简介(1)相关推荐
- gRPC in ASP.NET Core 3.x - gRPC 消息定义
之前写了几篇关于 Protoco Buffer 的文章. gRPC in ASP.NET Core 3.x - gRPC 简介(1) gRPC in ASP.NET Core 3.x - gRPC 简 ...
- gRPC in ASP.NET Core 3.x - gRPC 简介(2)
前一篇: gRPC in ASP.NET Core 3.x - gRPC 简介(1) 身份认证 这里指的不是用户的身份认证,而是指多个server和client之间,它们如何识别出来谁是谁,并且能安全 ...
- 如何在 ASP.NET Core 中为 gRPC 服务添加全局异常处理 ?
咨询区 Dmitriy 我在 ASP.NET Core 中使用 GRPC.ASPNETCore 工具包写 gRPC 服务,现在我想实现 gRPC 的异常全局拦截,我的代码如下: app.UseExce ...
- gRPC in ASP.NET Core 3.x -- Protocol Buffer, Go语言的例子(下)
前两篇文章半年前写的: gRPC in ASP.NET Core 3.0 -- Protocol Buffer(1), gRPC in ASP.NET Core 3.0 -- Protocol Buf ...
- gRPC in ASP.NET Core 3.x -- Protocol Buffer, Go语言的例子(上)
前两篇文章半年前写的: gRPC in ASP.NET Core 3.0 -- Protocol Buffer(1), gRPC in ASP.NET Core 3.0 -- Protocol Buf ...
- ASP.NET Core 3.0 gRPC 身份认证和授权
一.开头聊骚 本文算是对于 ASP.NET Core 3.0 gRPC 研究性学习的最后一篇了,以后在实际使用中,可能会发一些经验之文.本文主要讲 ASP.NET Core 本身的认证授权和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.NET Core开始使用gRPC客户端和服务器
目录 介绍 GRPC Protobuf文件 背景 先决条件 使用代码 第1步--创建gRPC服务应用程序 gRPC项目结构 构建并运行应用程序 第2步:创建客户端控制台.NET核心应用程序 添加必需的 ...
- asp.net core 3.0 gRPC框架小试
什么是gRPC gRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,采用ProtoBuf 定义的IDL. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优 ...
最新文章
- C++11中头文件atomic的使用
- 872.叶子相似的树
- 带你看懂LayoutInflater中inflate方法
- elasticsearch导入数据的几种方法
- 【iCore1S 双核心板_FPGA】例程十二:基于单口RAM的ARM+FPGA数据存取实验
- Atitit 理解Monad attilax总结
- redis.conf配置文件详解
- 网络爬虫--19.【Scrapy-Redis实战】分布式爬虫爬取房天下--环境准备
- 为什么谐振时电抗为0_高压直流输电(LCC-HVDC 和 MMC-HVDC)中平波电抗器的作用和选择策略...
- sql关系数据库计算机,关系数据库语言SQL - 淮阴工学院计算机工程实验中 ….ppt...
- mysql把两个查询的结果合并为一个结果
- 债券型理财产品以什么为投资对象?
- 哈希值之逆序数与变进制
- linux内网安装git,Linux 安装git
- 疫情过后,制造业中小企业应用工业互联网数字化转型之路的探讨
- 邮件群发海外服务器,国内与国外在邮件群发营销中的差别
- android 手机上浏览网页
- 安卓中Paint与Canvas用法
- StateFlow 状态流
- 【域控】Windows Server 2012 AD域控搭建-系统安装及环境配置-1
热门文章
- AsyncHttpClient的连接池使用逻辑
- DataAdapter.FillSchema 方法
- 加拿大大学 计算机专业排名2015,加拿大大学计算机专业排名top15
- wi-fi共享大师免广告_如何保护Wi-Fi网络免受入侵
- pkpm板按弹性计算还是塑性_双向板按弹性方法还是按塑性方法计算
- 一篇年薪60万的JVM性能调优文章
- JavaScript数据结构与算法——集合
- LoadRunner+Android模所器实现抓包并调试本地服务端
- AI+时代,谈谈产品经理对图像识别技术的阈值控制
- 《计算机组成原理》----2.3 二进制运算