gRPC简介

前提

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

RPC模式

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

Understanding RPCs - Part I - cat /dev/random | Prakhar Srivastav

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

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

Java中支持的包括:

技术简介是否支持跨平台
Corbra90年代产物,已被淘汰不支持
RMIEJB时代产物,已逐渐被淘汰不支持
WebService基于Http SOAP,效率低,逐渐被淘汰支持
Hessain基于Http,二进制序列化,效率高,使用广泛支持
Rest(spring mvc等)支持Http Rest,广泛应用于无线API,开放平台等支持
JMS、开源MQJava消息服务(消息中间件),使用广泛支持
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值