下面介绍一个性能很赞的google protobuff解析的Erlang库。

官方主页

https://github.com/tomas-abrahamsson/gpb

exmaple主页

https://gitcafe.com/Roowe/gpb-example

例子里面使用的gpb是我fork出来的,加了类似erlang_protobuffs生成的头文件ifndef,同时提供将消息名字转为小写的选项。

clone之后,执行./bootstrap根据提示操作即可

这个选项生成出来的erl和hrl文件,我们自测是兼容erlang_protobuffs的。这样一来,做迁移,就是无痛了,就是decode/encode要改为加上_msg,这个通常会封装成一个通用,所以改起来也方便。

2016年2月6日更新

在正式项目使用的时候,发现gpb每次都会写文件,这样一来,hrl变动之后,include它们的模块都需要重新编译一次,往往没有更动过hrl,也引起编译,有点不划算。

由于,gpb操作文件的时候,可以不用file模块,这样一来,我们加个hook即可绕开每次写文件的问题,但是这个黑科技要自己写个fun,但是命令行参数没法传递,只能绕开那个官方脚本了,要自己写个了,反正山寨个,也是很简单的事情。

可以去更新下我那个gpb-example项目,新增了protoc-erl脚本,修改下你们想要的目录结构就可以用了。提醒,我开了strings_as_binaries这个选项,这个会造成string解码的时候,并不是list,而是一个binary,这样的好处,就是省内存。