1.gRPC概述
gRPC是由Google开发的一款语言中立、平台中立、开源的远
程过程调用( RPC)技术,主要用来解决性能损失的问题。
gRPC使客户端和服务端应用程序可以透明地进行通信,并简
化了连接系统的构建。它使用HTTP/2作为通信协议,使用Protocol
Buffers作为序列化协议。
 

2.gRPC的优势
gRPC是由Google开发的一款语言中立、平台中立、开源的远
程过程调用( RPC)技术,主要用来解决性能损失的问题。
ggRPC有如下特有的优势:
(1)拥有现代高性能轻量级RPC框架。
(2)约定优先的API开发,默认使用Protocol Buffers 作为描述语言,允许与
语言无关的实现。
(3)可用于多种语言的工具,以生成强类型的服务器和客户端。
(4)支持客户端和服务器双向流调用。
(5)通过Protocol Buffers =进制序列化减少网络使用。
(6)使用HTTP/2进行传输。
 

3.gRPC的应用场景
基于gRPC的优势,可适用于以下场景:
( 1)高性能轻量级微服务
gRPC设计为低延迟和高吞吐量通信,非常适合需要高性能的轻量级微服务。
(2)多语言混合开发
gRPC支持所有流行的开发语言,使gRPC成为多语言开发环境的理想选择。
( 3)点对点实时通信
gRPC对双向流调用提供出色的支持。gRPC服务可实时推送消息而无需轮询。
(4)网络受限环境
使用Protocol Buffers_进制序列化消息,该序列化始终小于等效的JSON消息
对网络带宽需求比JSQN小
 

4.gRPC不适合应用的场景
基于gRPC的序列化过程,受带宽通信影响不适用于以下场景:
( 1)浏览器可访问的API
浏览器不完全支持gRPC,虽然gRPC -Web可以提供浏览器支持,但是它有局
限性,而且引入了服务器代理。
(2)广播实时通信
gRPC支持通过流进行实时通信,但不存在向已注册连接广播信息的概念。
( 3)进程间通信
进程必须承载HTTP/2才能接受传入的gRPC调用,对于Windows而言,进程
间通信管道是一种更快速的方法。

5.Protobuf协议文件
gRPC的核心是Protobuf协议文件(简称Protobuf文件)。Protobuf
实际上是一套类似JSON或者XML的数据传输格式和规范,用于不同
应用或进程之间进行通信时使用。Protobuf 协议文件的优点:
(1)足够简单。
(2)序列化后体积很小,消息大小只需要XML大小的1/10 ~ 1/3。
(3)解析速度快,解析速度比XML快20 ~ 100 倍。
(4)支持多语言。
(5)更好的兼容性。Protobuf设计的一个原则就是要能够很好地支持向下
或向上兼容。

Protobuf 协议文件的组成:

(1)声明Protobuf的版本。
(2)定义接口的命名空间名和包名。
(3)定义服务,包含定义服务名、服务方法名、方法参数和返回类型。
(4)定义请求消息。
(5)定义响应消息。

(1) syntax="proto2": 表示选择2版本,各个字段必须明确标注编号以确定
序列化后二进制数据字段的位置。
(2) syntax="proto3":表示选择3版本,没有强制使用字段编号。
 

6.Protobuf协议文件字段修饰符
Protobuf协议文件在声明字段时,可以在字段前加入字段修饰
符。Protobuf 协议文件包含以下三种字段修饰符:
required:对于equired的字段而言,初始值是必须要提供的,否则字段
便是未初始化的。
optional:对于optional的字段而言, 如未进行初始化会自动赋予默认值,还可
指定默认值。
repeated:对于repeated的字段而言,该字段可以重复多个,即每个编码单元
可能有多个该字段。高级语言里面的数组在Protobuf定义文件中可以使用repeated字段
修饰符实现,从而达到相同的目的。
 

7..NET Core对gRPC的支持
.NET Core 3.0开始对gRPC提供了支持,gRPC现在可以非常简单
地在.NET Core和ASP .NET Core中使用,良好地接入了.NET Core生态。
.NET Core提供以下gRPC软件包:
(1) Grpc .AspNetCore:一个用于在ASP.NET Core承载gRPC服务的框架,将
gRPC和ASP.NET Core功能集成在一起, 如日志、依赖注入、身份认证和授权。
(2) Grpc.Net.Client: 基于HttpClient (HttpClient现已支持HTTP/2 )的gRPC客户端。
(3) Grpc.Net.ClientFactory: 与gRPC 客户端集成的HtpClientFactory允许对
gRPC客户端进行集中配置,并使用DI注入到应用程序中。

创建gRPC项目

go rpc是什么意思 grp啥意思_go rpc是什么意思

greet.proto最初由C++演化而来

 

go rpc是什么意思 grp啥意思_java_02

go rpc是什么意思 grp啥意思_java_03

 

go rpc是什么意思 grp啥意思_go rpc是什么意思_04

go rpc是什么意思 grp啥意思_字段_05