[binary protocol | text protocol] 大家都采用什么序列化方式,自定义还是现成的轮子? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
haosamax
V2EX    Java

[binary protocol | text protocol] 大家都采用什么序列化方式,自定义还是现成的轮子?

  •  
  •   haosamax 2021-01-08 10:02:14 +08:00 3336 次点击
    这是一个创建于 1738 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在看《设计数据密集型应用》,看到编码部分,又想到框架中的自定义编码,有所想: 框架自定义的序列化方式很难用(字段值编码后拼接,无需编码名称),每次处理循环体都要手动处理操作字节,而且后兼容,想问下大伙:1 、为什么搜索结果都说 binary protocol 比 textprotocol 快; 2 、项目用的 protocol 是? 3 、有没有一种可读性高并且速度快的编码方式?

    22 条回复    2021-01-12 15:06:19 +08:00
    oott123
        1
    oott123  
       2021-01-08 10:32:26 +08:00 via Android
    overhead 低信息密度高自然就快,本前端表示除了 json 和 msgpack 别的都不用(
    chendy
        2
    chendy  
       2021-01-08 10:40:04 +08:00
    1. 二进制少一轮字符串解码编码,表示数字和布尔用的字节更少,不考虑人类阅读可以用更紧凑的格式,代价就是直接拿给人类看基本看不懂
    2. binary 只想到 protobuf,text 只想到 json
    3. json 也不慢
    togou
        3
    togou  
       2021-01-08 12:11:04 +08:00
    解析二进制比 字符串各种查找 配对肯定快 xml json 肯定比不过 pb tars 这种二进制协议啊
    PureWhiteWu
        4
    PureWhiteWu  
       2021-01-08 12:11:28 +08:00
    binary
    haosamax
        5
    haosamax  
    OP
       2021-01-08 12:20:34 +08:00 via iPhone
    各位说的是,为社么快这块理解了
    liian2019
        6
    liian2019  
       2021-01-08 14:04:58 +08:00
    json 和 protobuf
    MeteorCat
        7
    MeteorCat  
       2021-01-08 14:28:00 +08:00 via Android
    json 主要是冗余太多了,还套个 http 协议,但是可视化很方便,基本上有个 web 浏览器就能调试
    haosamax
        8
    haosamax  
    OP
       2021-01-08 14:29:41 +08:00
    @liian2019 那如果更换为 protobuf,有没有 JavaBean 生成.proto 的工具
    icyalala
        9
    icyalala  
       2021-01-08 14:35:06 +08:00
    protobuf 有强类型这个 json 比不了,但是单看性能,不一定比 json + gzip + simdjson 快到哪里去,而且 pb 还会生成一大坨代码出来难用的要死。但凡想要点可读性那选 json 没错。
    chenqh
        10
    chenqh  
       2021-01-08 14:37:04 +08:00
    json 太好调试了呀,二进制的东西调试成本比 json 高太多了
    liian2019
        11
    liian2019  
       2021-01-08 17:55:50 +08:00
    @haosamax 一般都是 protobuf 转 java
    xiangbohua
        12
    xiangbohua  
       2021-01-08 19:38:28 +08:00
    没什么特别需求无脑 json,或者 xml 啊,搞协议的搞搞 protobuf 啥的吧。
    xiangbohua
        13
    xiangbohua  
       2021-01-08 20:00:46 +08:00
    哎,参加工作的第一年,一个做虚拟化的公司,用的 Protobuf 当时烧了不少脑细胞
    12101111
        14
    12101111  
       2021-01-08 21:30:06 +08:00
    但是现在 json 的序列化用上 SIMD 之后速度惊人, 实际上也是按照二进制的方式解析的, 只不过按弱类型操作 json 容易有 bug
    nthhdy
        15
    nthhdy  
       2021-01-08 22:33:44 +08:00
    binary 是快,但基本上就意味着可读性低,一般必须得用工具才能看。对性能要求不高时,json 很好用,可读性好,编码本身的扩展性也好,改字段、类型很容易。
    haosamax
        16
    haosamax  
    OP
       2021-01-09 09:44:52 +08:00 via iPhone
    @xiangbohua 内部系统 socket 通讯,自定义的协议用着有点 egg pain
    haosamax
        17
    haosamax  
    OP
       2021-01-09 09:46:19 +08:00 via iPhone
    @liian2019 是的。如果迁移的话岂不是都得写一遍 proto 文件
    labubu
        18
    labubu  
       2021-01-09 16:56:25 +08:00
    要看应用场景是什么,要是对流量要需求比较高的话,比如说网络游戏,那肯定用偏二进制方面的编码
    liian2019
        19
    liian2019  
       2021-01-11 09:58:41 +08:00
    @haosamax 这个没有接触过,可以 google 看看有没有什么好的解决方案。一般协议应该也不会太多吧
    onepix
        20
    onepix  
       2021-01-11 17:29:01 +08:00
    textprotocol 可以理解成是在 string 的通用的 binary protocol 基础上又封装了一层,我们平时说的使用 UTF8 还是 就是这个 string 的 binary protocol 的实现,所以 textprotocol 会慢一拍啊
    haosamax
        21
    haosamax  
    OP
       2021-01-11 18:27:12 +08:00 via iPhone
    @onepix 理解了
    SkyLine7
        22
    SkyLine7  
       2021-01-12 15:06:19 +08:00
    json
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2734 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 14:46 PVG 22:46 LAX 07:46 JFK 10:46
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86