首页
注册
登录
BingGan 最近的时间轴更新
BingGan
V2EX 第 452006 号会员,加入于 2019-11-09 12:52:39 +08:00
BingGan
提问
技术话题
好玩
工作信息
交易信息
城市相关
BingGan 最近回复了
333 天前
回复了
CyouYamato
创建的主题
›
程序员
›
关于 grpc, proto 的疑惑
这个问题就是在问 protobuf 和 json 的区别嘛,随便一搜就有。
头一个缺点是非字符串的编码低效。比如 int 字段的值是 12345 ,内存表示只占两个字节,转成 JSON 却要五个字节。bool 字段则占了四或五个字节。
再一个缺点就是信息冗余。同一个接口同一个对像,只是 int 字段的值不同,每次都还要传输”int”这个字段名。
等等,这是缺点吗?是!可 JSON 为什么会有这些毛病呢?因为 JSON 在可读性和编码效率之间选择了可读性,所以效率方面做了一定的牺牲。
好了,现在人们觉得效率是主要矛盾了,那就必然会牺牲可读性。为此,Protobuf 一方面选用了 VarInts 对数字进行编码,解决了效率问题;另一方面给每个字段指定一个整数编号,传输的时候只传字段编号,解决了冗余问题。更多细节可参考的另一篇文章
在传输的时候只传了字段编号固然可以提高传输效率,但接收方如何知道各个编号对应哪个字段呢?只能事先约定了。就像当年地下工作者一样,一人拿一个密码本。Protobuf 使用 .proto 文件当密码本,记录字段和编号的对应关系
»
BingGan 创建的更多回复
关于
·
帮助文档
·
博客
·
API
·
FAQ
·
实用小工具
·
1016 人在线
最高记录 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 19ms ·
UTC 19:02
·
PVG 03:02
·
LAX 11:02
·
JFK 14:02
Developed with
CodeLauncher
♥ Do have faith in what you're doing.