主流序列化协议优缺点和网站推荐

JSON

优点

  1. 简单易用开发成本低
  2. 跨语言
  3. 轻量级数据交换
  4. 非冗长性(对比xml标签简单括号闭环)

缺点

  1. 体积大,影响高并发
  2. 无版本检查,自己做兼容
  3. 片段的创建和验证过程比一般的XML复杂
  4. 缺乏命名空间导致信息混合

总结:最简单最通用的应用协议,使用广泛,开发效率高,性能相对较低,维护成本较高。

Protobuf

Protobuf是一种以有效并可扩展的格式编码结构化数据的方式。

优点

  1. 跨语言,可自定义数据结构。
  2. 字段被编号,新添加的字段不影响老结构。解决了向后兼容问题。
  3. 自动化生成代码,简单易用。
  4. 二进制消息,效率高,性能高。
  5. Netty等框架集成了该协议,提供了编×××提高开发效率。

缺点

  1. 二进制格式,可读性差(抓包dump后的数据很难看懂)
  2. 对象冗余,字段很多,生成的类较大,占用空间。
  3. 默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)

总结:简单快速上手,高效兼容性强,维护成本较高。

参考网站

  • 官网和指南:https://developers.google.com/protocol-buffers/
  • Github:https://github.com/protocolbuffers/protobuf
  • Netty 对 protobuf 协议的解码与包装探究:netty 对 protobuf 协议的解码与包装探究(2) - itank - 博客园
  • Protobuf开发原则和缺陷详解:https://my.oschina.net/cxh3905?tab=newest&catalogId=387288

Thrift(Facebook)

优点

  1. 序列化和RPC支持一站式解决,比pb更方便
  2. 跨语言,IDL接口定义语言,自动生成多语言文件
  3. 省流量,体积较小
  4. 包含完整的客户端/服务端堆栈,可快速实现RPC
  5. 为服务端提供了多种工作模式,如线程池模型、非阻塞模型

缺点

  1. 早期版本问题较大,0.7以前有兼容性问题
  2. 不支持双通道
  3. rpc方法非线程安全,服务器容易被挂死,需要串行化。
  4. 默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)
  5. 开发环境、编译较麻烦

总结:跨语言、实现简单,初次使用较麻烦,需要避免使用问题和场景限制。

参考网站

  • Thrift: The Missing Guide:Thrift: The Missing Guide
  • Thrift 的一场美丽邂逅:和 Thrift 的一场美丽邂逅 - cyfonly - 博客园
  • 由浅入深了解Thrift(一)——Thrift介绍与用法:由浅入深了解Thrift(一)——Thrift介绍与用法_逍遥子_的博客-CSDN博客_thrift

MessagePack

优点

  1. 跨语言,多语言支持(超多)
  2. It’s like JSON.but fast and small.序列化反序列化效率高(比json快一倍),文件体积小,比json小一倍。
  3. 兼容json数据格式

缺点

  1. 缺乏复杂模型支持。msgpack对复杂的数据类型(List、Map)支持的不够,序列化没有问题,但是反序列化回来就很麻烦,尤其是对于java开发人员。
  2. 维护成本较高。msgpack通过value的顺序来定位属性的,需要在不同的语言中都要维护同样的模型以及模型中属性的顺序。
  3. 不支持模型嵌套。msgpack无法支持在模型中包含和嵌套其他自定义的模型(如weibo模型中包含comment的列表)。

总结:高性能但扩展性较差维护成本较高。

参考网站

  • 官网:MessagePack: It's like JSON. but fast and small.
  • msgpack-java:https://github.com/msgpack/msgpack-java
  • MessagePack for C#译文:快速序列化组件MessagePack介绍 - 晓晨Master - 博客园
  • 原理分析和使用:https://www.jianshu.com/p/8c24bef40e2f
  • Code:org.msgpack.MessagePack Java Exaples

多协议对比

  • 序列化时间对比

  • 序列化大小对比

  • Go语言序列化性能比较:GitHub - smallnest/gosercomp: Golang Serializer Benchmark Comparison
  • 各种 Java 的序列化库的性能比较测试结果:各种 Java 的序列化库的性能比较测试结果-51CTO.COM

JavaWeb - JSON、Protobuf、Thrift、MessagePack 对比和开发指南相关推荐

  1. JSON、Protobuf、Thrift、MessagePack 对比和开发指南

    主流序列化协议优缺点和网站推荐 JSON 优点 1 简单易用开发成本低 2 跨语言 3 轻量级数据交换 4 非冗长性(对比xml标签简单括号闭环) 缺点 1 体积大,影响高并发 2 无版本检查,自己做 ...

  2. 序列化:Protobuf 与 JSON、XML 的对比

    Protobuf .JSON.XML 的对比 XML JSON PB 数据结构支持 复杂结构 简单结构 较复杂结构 数据保存方式 文本 文本 二进制 数据保存大小 大 一般 小 解析效率 慢 一般 快 ...

  3. java服务端开发 php_PHP使用thrift做服务端开发

    php中文网最新课程 每日17点准时技术干货分享 php使用thrift做服务端开发 thrift采用接口描述语言定义和创建服务,用二进制格式传输数据,体积更小.效率更高,对于高并发.数据量大和多语言 ...

  4. Google Protobuf 开发指南

    为什么80%的码农都做不了架构师?>>>    Google Protobuf开发指南 1.简介 l  它是开源项目:http://code.google.com/p/protobu ...

  5. Protobuf实现Android Socket通讯开发教程

    本节为您介绍Protobuf实现Android Socket通讯开发教程,因此,我们需要先了理一下protobuf 是什么? Protocol buffers是一种编码方法构造的一种有效而可扩展的格式 ...

  6. 金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(原理篇)

    为什么80%的码农都做不了架构师?>>>    本文作者:丁同舟,转载自"随手记技术团队"微信公众号. 1.前言 跟移动端IM中追求数据传输效率.网络流量消耗等需 ...

  7. 金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(实战篇)

    本文作者:丁同舟,来自金蝶随手记技术团队. 1.前言 本文接上篇<金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(原理篇)>,以iOS端的Objective-C代 ...

  8. Knockout应用开发指南 第六章:加载或保存JSON数据

    原文:Knockout应用开发指南 第六章:加载或保存JSON数据 加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地 ...

  9. javaWeb企业分布式、互联网、云开发平台-Jeesz

    平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis ...

最新文章

  1. 9月21日科技联播:报告显示网约车案发率低于传统出租车;刘强东性侵案已移交美国检方...
  2. MATLAB实时标定
  3. DAG情况下如何移动数据库路径
  4. 013_Slider滑块
  5. nacos怎么修改服务分组_nacos服务注册如何配置分组?
  6. 2021-07-27 详解TCP连接建立和释放的过程(三报文握手和四次挥手)
  7. 小程序 php wecahtpay,【PHP】laravel 实现微信小程序微信支付功能
  8. python3.9新特性_Python3.9又更新了:dict内置新功能
  9. scp连接linux网络错误,winscp连接linux(centos7)时提示主机超过15秒无通信,继续等待的解决方法...
  10. pythonide的作用_你知道Python神器IDE是什么吗?
  11. Extjs中引入JSP页面
  12. 微信小程序wxml如何判断字符串中汉语某字符_如何获取别人微信小程序的源文件?...
  13. [0 to 0.5]从零开始学习Android动画知识(上)
  14. opencv用于医学图像分割
  15. How to get admin priviledge in Vista using ziguang holes
  16. (一)移动端前端开发-移动端基础
  17. Daniel Sabbah:软件工程的转折点
  18. 函数中的arguments
  19. 华师的入学计算机测试题,华师期末考试计算机练习题
  20. 关于风险和收益的想法

热门文章

  1. plink --extract参数采坑问题记录
  2. cultureinfo 类 java_为国家,语言组合创建自定义CultureInfo
  3. WEB安全基础 - - - XRAY使用
  4. 拉格朗日插值法--python
  5. B站【狂神说Java笔记】-注解和反射
  6. Linux下使用ps命令查看某个进程文件的启动位置
  7. 线程并发问题(线程安全)
  8. Windows卡死问题分析
  9. 50个好用的前端框架,千万收好以留备用!
  10. hdoj 2036 改革春风吹满地 (多边形面积)