Msgpack有没有兴趣了解一下?

简介: Msgpack有没有兴趣了解一下?

在我们做开发的时候经常会考虑到客户端服务器通信到问题,简单的来说就是客户端首发数据的问题。


那么,对于收发的数据这个内容,其实大有讲究,关于收发数据,我们通常情况下都会毫不犹豫的会说json数据,xml数据,基本上就这么多了,现在基本上都是json数据为主了,那我们今天来介绍的是比json还好用的数据结构------msgpack。


比json好用的数据其实有很多,例如上次我们提到过的protobuf,这是google提供的一个数据结构,能改很大程度上改善传送数据的大小和结构,默认读取的数据都会解析成字符串。那我们为什么会选则使用msgpack呢?


首先引用msgpack官网用一句话总结:

640.png


msgpack会将数据打包成二进制的数据,它的数据格式与json类似,但是在存储时对数字、多字节字符、数组等都做了很多优化,减少了无用的字符,二进制格式,也保证不用字符化带来额外的存储空间的增加,所以在很大程度上减少来传输数据的大小。如果说把json数据的大小比作西瓜大小,那么protobuf就是苹果大小,msgpack呢,则是红豆大小,所以msgpack使用优势还是很明显的!


下面我们来看看来自msgpack官网的第二张图:


640.png

一组json数据长度是是27个bytes,因为使用json这样的数据格式,在这个格式上就会消耗9个字节(分号,大括号之类的,这些数据其实),然后在数据的表示上也会有优化

,例如,关于数据Ture,在msgpack里面直接给一个字节就可以表示true(0xc3),关于结构化数据,例如字符串,数组等,类型后面加 1~4个字节,用来存字符串的长度,如果是字符串长度是256以内的,只需要1个字节,MsgPack能存的最长的字符串,是(2^32 -1 ) 最长的4G的字符串大小。如果是字典的类型的数据的话,需要加1~4个字节表示后面有多少个项。



关于如何使用Msgpack?


msgpack这么好用,我们应该如何使用它呢?

这和json用起来是一样的,无非就是打包和解包。这里我们采用python来演示一下。

想在python中使用msgpack,就需要安装msgpack模块,我们还是老样子,使用pip进行安装:

pip install msgpack

安装完之后导入这个模块,就可以使用了。

import msgpack
msgpack.packb([1, 2, 3], use_bin_type=True)
'\x93\x01\x02\x03'
msgpack.unpackb(_, raw=False)
[1, 2, 3]


如代码所示,我们采用packb对数据进行打包,使用unpackd进行解包。


我们还可以借助于bytesIO打包数据:

import msgpack
from io import BytesIO
buf = BytesIO()
for i in range(100):
   buf.write(msgpack.packb(i, use_bin_type=True))
buf.seek(0)
unpacker = msgpack.Unpacker(buf, raw=False)
for unpacked in unpacker:
    print(unpacked)


在使用packb和unpackb方法时可以默认只传一个参数,也就是要打包/解包的数据,其他都可以默认不传。


除了使用packed方法,msgpack很人性化的提供了另一种打包和解包的方法,这个方法和json打包/解包的方法一样,那就是dumps和loads方法了:

import msgpack
a = msgpack.dumps([1, 2, 3], use_bin_type=True)
msgpack.loads(a, raw=False)


以上就是小编这次给大家带来的msgpack的介绍了。

相关文章
|
6月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
556 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
前端开发 JavaScript API
Ajax技术的秘密揭秘:异步传输,高效交互
Ajax技术的秘密揭秘:异步传输,高效交互
|
9月前
|
机器学习/深度学习 人工智能 算法
技术项目经理TPM的日常任务:职责侧重与工作内容
技术项目经理是技术驱动型行业中的关键角色,是技术与管理的桥梁,负责识别和解决技术风险,提升团队技术能力,保证技术方案的稳定性和安全性。
440 2
技术项目经理TPM的日常任务:职责侧重与工作内容
|
11月前
|
数据采集 存储 监控
实现自动化数据抓取:使用Node.js操控鼠标点击与位置坐标
本文介绍了如何使用Node.js和Puppeteer实现自动化数据抓取,特别是针对新闻网站“澎湃新闻”。通过设置代理IP、User-Agent和Cookie,提高爬虫的效率和隐蔽性,避免被网站封锁。代码示例展示了如何模拟鼠标点击、键盘输入等操作,抓取并整理新闻数据,适用于需要规避IP限制和突破频率限制的场景。
455 10
|
11月前
|
前端开发 JavaScript
|
人工智能 自然语言处理 小程序
【AI】Gemini:听说GPT-4你小子挺厉害
谷歌推出新AI模型Gemini Pro,支持中文并具备多模态处理能力,涵盖文本、图像、音频、视频和代码。本文通过五个问题对比Gemini Pro与ChatGPT-4的表现,包括绘画、数学题解答、成语解释、天气查询及奥运冠军名单。结果显示两者各有优势,Gemini Pro在成语解释和天气查询方面略胜一筹,而ChatGPT-4在绘画方面表现更好
196 0
【AI】Gemini:听说GPT-4你小子挺厉害
|
缓存 NoSQL Java
谷粒商城笔记+踩坑(12)——缓存与分布式锁,Redisson+缓存数据一致性
缓存与分布式锁、Redisson分布式锁、缓存数据一致性【必须满足最终一致性】
650 14
谷粒商城笔记+踩坑(12)——缓存与分布式锁,Redisson+缓存数据一致性
|
12月前
|
负载均衡 Java Nacos
Nacos服务注册与发现
【10月更文挑战第11天】Nacos 是一个开源平台,用于服务发现和配置管理,提供服务注册、发现及动态配置等功能,适用于微服务架构。其核心功能包括服务注册、服务发现和动态配置管理,支持多种语言如 Java、Go、Python 等,具备高可用性和易用性。Nacos 可用于微服务治理、动态扩展和跨语言服务调用等场景,简化了服务间的交互和管理。
467 10
分布式系列教程(25) -解决Zookeeper启动失败的问题
分布式系列教程(25) -解决Zookeeper启动失败的问题
656 0
|
算法 JavaScript
「AIGC算法」将word文档转换为纯文本
使用Node.js模块`mammoth`和`html-to-text`,该代码示例演示了如何将Word文档(.docx格式)转换为纯文本以适应AIGC的文本识别。流程包括将Word文档转化为HTML,然后进一步转换为纯文本,进行格式调整,并输出到控制台。转换过程中考虑了错误处理。提供的代码片段展示了具体的实现细节,包括关键库的导入和转换函数的调用。
284 0