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进行通信。


相关文章
|
消息中间件 机器学习/深度学习 存储
字节跳动大数据开发面试题-附答案 (一)
此面试题来自牛客网友分享的字节跳动应届一面,面试时长一小时。 网友情况:985 本硕。
2140 0
字节跳动大数据开发面试题-附答案 (一)
|
域名解析 Cloud Native Java
重磅官宣:Nacos2.0 发布,性能提升 10 倍
继 Nacos 1.0 发布以来,Nacos 迅速被成千上万家企业采用,并构建起强大的生态。但是随着用户深入使用,逐渐暴露一些性能问题,因此我们启动了 Nacos 2.0 的隔代产品设计,时隔半年我们终于将其全部实现,实测性能提升 10 倍,相信能满足所有用户的性能需求。下面由我代表社区为大家介绍一下这款跨代产品。
重磅官宣:Nacos2.0 发布,性能提升 10 倍
|
存储 Android开发 iOS开发
flutter使用dio实现 文件下载并实现进度监听总结
在flutter开发中使用dio实现 文件下载并实现进度监听
|
6月前
|
数据可视化 JavaScript 前端开发
WebSocket调试神器对决:Apipost凭何碾压Apifox?
在实时交互需求日益增长的今天,WebSocket协议成为股票行情推送、游戏交互和IM系统等场景的必备技术。然而,传统调试工具效率低下,难以满足开发者需求。Apipost凭借原生协议支持、智能消息解析与零代码文档生成,全面超越竞品Apifox。从快速建立连接、高效消息分组到自动化文档输出,Apipost重构了WebSocket调试体验,为开发者带来革命性生产力提升。在GraphQL、Socket.IO等新技术浪潮下,选择得力工具至关重要。
|
10月前
|
存储 JavaScript 前端开发
Generator 函数的使用场景有哪些?
【10月更文挑战第30天】Generator函数在JavaScript中提供了一种强大而灵活的编程模式,能够在异步编程、数据处理、状态管理等多个领域发挥重要作用,帮助开发者更高效地解决各种复杂的编程问题,提高代码的可读性和可维护性。
|
算法 前端开发
Proteus 8 Professional安装教程
Proteus 8 Professional安装教程
1511 0
|
前端开发
html编写登录页面练习
html编写登录页面练习
123 0
|
C++
【代码片段】【C++】获取当前时间戳并生成固定格式字符串
【代码片段】【C++】获取当前时间戳并生成固定格式字符串
248 0
|
存储 算法 测试技术
【软件工程题库】第二章 可行性分析
【软件工程题库】第二章 可行性分析
1387 1