gRPC笔记与相关问题

简介: gRPC笔记与相关问题

gRPC笔记

为什么要用RPC,数据编码,请求映射?

数据编码就是序列化,反序列化,将对象变成字节流发送给服务端,服务端将收到的字节流再转化为对象

常见的序列化,反序列化工具XML, JSON, Protobuf。

既然Protobuf在某些场景下效率要比JSON高,为什么高?

Json的缺点就是非字符串的编码效率低,int类型在内存只占两个字节65535, 转化成JSON却需要五个字节,bool则需要占用四到五个字节

另一个缺点就是信息冗余,面对同一个接口同一个对象,需要重复传送相同的字段名。

Json在编码效率和可读性之间选择了可读性

Protobuf选用了VarInts对数字进行编码,解决了效率问题,另一方面将字段都指定为整数编号,传输的时候只传送字段编号,解决了冗余问题,Protobuf使用.proto文件作为schema记录字段和编号的对应关系

gRPC底层使用的HTTP/2协议

HTTP协议本身可以通过Content-Encoding表示压缩算法,使用Contetn-length指定数据长度。

而gRPC重新定义了一套机制,因为gRPC支持stream rpc,流式接口。

gRPC支持三种流式接口,请求流,响应流,双向流。

请求流可以在RPC发起之后不断发送新的请求消息,此类接口最典型的使用场景事发推送或者短信。

相应流可以在RPC发起之后不断接受新的响应消息,最典型的场景就是订阅消息通知

双向流可以在RPC发起之后同时手法消息,最典型的场景就是实时语音转字幕

为了实现流式传输,gRPC引入Length-Prefixed Message同一个gRPC请求的不同消息共用HTTP头信息,只能给每个消息单独加一个五字节的前缀来表示压缩和长度信息。gRPC还定义了自己的grpc-status和grpc-message

HTTP/1.1也是支持复用TCP连接的,但这种复用有一个明显的缺陷,所有请求必须排队,先到先服务。

HTTP/2引入了stream的概念,解决了TCP链接复用的问题,可以在一条TCP连接上并行收发HTTP消息,而无需等待。

即gRPC为了实现流式特性,使用了HTTP/2进行通信。


相关文章
|
6月前
|
NoSQL Ubuntu 测试技术
GRPC C++开发环境搭建
GRPC C++开发环境搭建
639 0
|
存储 负载均衡 Cloud Native
gRPC的原理和实践
gRPC的原理和实践
502 1
gRPC的原理和实践
|
24天前
|
网络协议 安全 Go
|
5月前
|
存储 负载均衡 网络协议
gRPC 的原理 介绍带你从头了解gRPC
gRPC 的原理 介绍带你从头了解gRPC
235 2
|
6月前
|
JSON 缓存 Java
ProtoBuf-gRPC实践
gRPC 是一个高性能、开源、通用的 RPC 框架,基于 HTTP/2 设计,使用 Protocol Buffers(ProtoBuf)作为序列化协议。ProtoBuf 允许定义服务接口和消息类型,编译器会生成客户端和服务器端的代码,简化了跨平台的通信。 **gRPC 学习背景** 1. **为什么要学gRPC**:提高网络通信效率,支持多平台、多语言,提供高效序列化和反序列化,以及可靠的安全性和流控。 2. **RPC是什么**:远程过程调用,允许一个程序调用另一个不在同一设备上的程序。 3. **网络库收益分析**:gRPC 提供高效、安全、易用的网
302 0
|
6月前
|
XML Go 开发工具
RPC简介和grpc的使用
RPC简介和grpc的使用
94 0
|
负载均衡
gRPC源码分析(二):从官网文档看gRPC的特性
在第一部分,我们学习了gRPC的基本调用过程,这样我们对全局层面有了一定了解。接下来,我们将结合官方文档,继续深入学习、探索下去。
74 0
|
Java 编译器 API
gRPC 初探与简单使用
gRPC 初探与简单使用
59 0
|
负载均衡 安全 Cloud Native
2023-5-15-gRpc框架学习
2023-5-15-gRpc框架学习
146 0
|
Cloud Native 物联网 编译器
gRPC(三)基础:gRPC快速入门
Protobuf 是 Google 的序列化/反序列化协议,可以轻松定义服务和自动生成客户端库。gRPC 使用此协议作为其接口定义语言 (IDL) 和序列化工具集。
380 0
gRPC(三)基础:gRPC快速入门