gRPC简介

文章目录

  • 前提
  • RPC模式
  • Java和.NET平台中常见的通信技术
    • Java中支持的包括:
    • .NET中包括:
  • gRPC
    • Protobuf(Protocol Buffers 编码)
      • proto3
        • 定义类型
    • gRPC 的优势
    • gRPC .net6 demo

前提

谈到gRPC,我们不得不说一下RPC,RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC它假定某些协议的存在,例如TPC/UDP等,为通信程序之间携带信息数据。在OSI网络七层模型中,RPC跨越了传输层和应用层,RPC使得开发,包括网络分布式多程序在内的应用程序更加容易。

RPC模式

RPC采用客户端/服务端的模式,通过request-response消息模式实现

gRPC简介_第1张图片

通过上图可以了解到RPC模式和WebApi其实是一样的,都是服务端模式,也就是客户端call服务端的形式。但是这里是否有区别呢,我们下面慢慢探索。

Java和.NET平台中常见的通信技术

Java中支持的包括:

技术 简介 是否支持跨平台
Corbra 90年代产物,已被淘汰 不支持
RMI EJB时代产物,已逐渐被淘汰 不支持
WebService 基于Http SOAP,效率低,逐渐被淘汰 支持
Hessain 基于Http,二进制序列化,效率高,使用广泛 支持
Rest(spring mvc等) 支持Http Rest,广泛应用于无线API,开放平台等 支持
JMS、开源MQ Java消息服务(消息中间件),使用广泛 支持
Socket 基于Mina、Netty(NIO、AIO高效通信) 理论上支持

.NET中包括:

技术 简介 是否支持跨平台
WebService 基于Http SOAP,效率低,逐渐被WCF整合淘汰 支持
.NET Remoting 通信效率尚可,使用复杂,逐渐被WCF整合淘汰 不支持
WCF SOAP 整合了原有的WebService,通信效率低 支持
WCF NET.TCP 通信效率高,部分.NET项目内部服务在使用 不支持
WCF Rest 使用较少,已经被Web Api逐渐取代 支持
Web Api 支持Http Rest,广泛应用于无线API,开放平台等 支持
MSMQ、开源MQ 微软自己的消息中间件或者其他开源MQ 支持(MSMQ除外)
Hessain .NET 基于Http,二进制序列化,效率高,使用较少 支持
Socket 通过Socket网络编程方式实现系统通信 理论上支持

gRPC

谷歌开源的一套 RPC 协议框架,默认基于Protobuf协议进行数据输出。

Protobuf(Protocol Buffers 编码)

Protobuf 是一种与语言无关、与平台无关的可扩展机制,用于序列化结构化数据。

proto3

第一行第一句syntax = "proto3";,如何html5的第一句一样,都是为了定义版本和语义

定义类型
message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 results_per_page = 3;
}

关于更多proto3的语法请查阅语言指南(原型 3) |协议缓冲区文档 (protobuf.dev)

C#版本的proto3协议基础知识查阅协议缓冲区基础知识:C# |协议缓冲区文档 (protobuf.dev)

gRPC 的优势

gRPC 使用 HTTP/2 作为传输协议。 虽然与 HTTP 1.1 也能兼容,但 HTTP/2 具有许多高级功能:

  • 用于数据传输的二进制组帧协议 - 与 HTTP 1.1 不同,HTTP 1.1 是基于文本的。
  • 对通过同一连接发送多个并行请求的多路复用支持 - HTTP 1.1 将处理限制为一次处理一个请求/响应消息。
  • 双向全双工通信,用于同时发送客户端请求和服务器响应。
  • 内置流式处理,支持对大型数据集进行异步流式处理的请求和响应。
  • 减少网络使用率的标头压缩。

gRPC 是轻量型且高性能的。 其处理速度可以比 JSON 序列化快 8 倍,消息小 60% 到 80%。 在 Microsoft Windows Communication Foundation (WCF) 中,gRPC 的性能超过经过高度优化的 NetTCP 绑定的速度和效率。 与偏向于 Microsoft 堆栈的 NetTCP 不同,gRPC 是跨平台的。

gRPC .net6 demo

.NetCore gRpc 客户端与服务端的单工通信Demo

你可能感兴趣的:(c#,rpc,.net,后端,grpc)