对象序列化类库MsgPack介绍

作者: NickYang 分类: 技术文章,程序开发 发布时间: 2012-11-26 21:24

MessagePack(以下简称MsgPack)一个基于二进制高效的对象序列化类库,可用于跨语言通信。它可以像JSON那样,在许多种语言之间交换结构对象;但是它比JSON更快速也更轻巧。支持Python、Ruby、Java、C/C++等众多语言。比Google Protocol Buffers还要快4倍。

代码:
> require ‘msgpack’
> msg = [1,2,3].to_msgpack  #=> “\x93\x01\x02\x03”
> MessagePack.unpack(msg)   #=> [1,2,3]

以上摘自oschina介绍。

msgpack官方主页:http://msgpack.org/

github主页:https://github.com/msgpack/msgpack

因我只使用C++版本,故只下载了CPP部分,大家请按需下载。

源码安装msgpack

打开终端下载msgpac 4 cpp最新版本0.5.7

解压

进入解压后的文件夹中进行安装

当然了,你也可以使用git和svn直接抓取源代码进行编译,不过需要安装版本控制工具。

自动安装msgpack

(安装过程中会将头文件拷贝到 /usr/local/include/ 库文件拷贝到/usr/local/lib/)

安装好了,我们直接使用用它看看效果。

直接包含msgpack.hpp即可使用。

simple using

结果就不贴了,大家自己运行下便知。

using stream

使用sbuffer stream序列化多个对象。

如何序列化自定义数据结构

msgpack支持序列化/反序列化自定义数据结构,只需要简单的使用MSGPACK_DEFINE宏即可。

这样我们就可以在网络通讯等地方可以使用msgpack来序列化我们的数据结构,完全可以做到安全高效,并且可以在接收方使用别的语言来处理结构做逻辑。完全是 多种语言-多种语言,现在支持的语言如下:

Ruby Perl Python C/C++ Java PHP JS OC C# Lua Scala D Haskell Erlang Ocaml Smallalk GO LabVIEW

完全够我们使用了,当然了,如果没有你要的语言,建议看源代码模仿一个。

关于性能测试结果可以查看:linux使用msgpack及测试 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

4条评论
  • serenity

    2014 年 3 月 18 日 15:40

    请问想把msgPack导出到lua使用可以么 好多宏函数什么的 用tolua导出一堆问题….. 是不是lua想用的话 还是使用protocolbuf好点???急啊

    潜水 Safari浏览器 Mac OS X
    1. eliteYang

      2014 年 3 月 18 日 19:42

      msgpack可以在Lua中使用的,http://fperrad.github.io/lua-MessagePack/msgpack.html#examples 这里有讲如何使用的,https://github.com/fperrad/lua-MessagePack/ 是Lua版本的msgpack,例子中提到了必须要使用匹配的Lua版本才可以。详见:obviously, the emitter and receiver MUST use the same version of Lua。或者说你的意思是C++中用msgpack,然后把结果导出到Lua中,如果是这样的话,那就得看你配置是不是有什么问题了,具体错误是什么?

      神话 Chrome浏览器 Windows 7 x64 Edition
  • dfasf

    2013 年 6 月 30 日 12:40

    最后一段示例源码有误吧, std::vector my_class_vec; 应该是std::vector<my_class> my_class_vec;

    潜水 其它浏览器 其它操作系统
    1. eliteYang

      2013 年 7 月 1 日 09:26

      嗯,你说的对的,我发现我都忘了写尖括号了

      神话 其它浏览器 其它操作系统

发表评论

电子邮件地址不会被公开。 必填项已用*标注