首页 > 代码库 > Erlang 在erlang项目中使用protobuf

Erlang 在erlang项目中使用protobuf

protobuf是google的一个序列化框架,类似XML,JSON,其特点是基于二进制,比XML表示同样一段内容要短小得多,还可以定义一些可选字段,广泛用于服务端与客户端通信。文章将着重介绍在erlang中如何使用protobuf。

首先google没有提供对erlang语言的直接支持,所以这里使用到的第三方的protobuf库( erlang_protobuffs )

定义一个protobuf结构,保存为test.proto,如下: 

message Person {  required int32 age = 1;  required string name = 2;}message Family {  repeated Person person = 1;}

编译这个protobuf结构,生成相应的erlang代码:

% 生成相应的erl和hrl文件protobuffs_compile:scan_file_src("test.proto").% 生成相应的beam和hrl文件protobuffs_compile:scan_file("test.proto").

下面我们以例子简单说明如何使用: 

-module(test).-compile([export_all]).-include("test_pb.hrl").encode() ->	Person = #person{age=25, name="John"},	test_pb:encode_person(Person).decode() ->	Data = http://www.mamicode.com/encode(),"John"},		#person{age=23, name="Lucy"},		#person{age=2, name="Tony"}	],	Family = #family{person=RepeatData},	test_pb:encode_family(Family).	decode_repeat() ->	Data = http://www.mamicode.com/encode_repeat(),>

运行代码,如下:

6> c(test).{ok,test}7> test:encode().<<8,25,18,4,74,111,104,110>>8> test:decode().{person,25,"John"}9> test:encode_repeat().<<10,8,8,25,18,4,74,111,104,110,10,8,8,23,18,4,76,117,99,  121,10,8,8,2,18,4,84,111,110,...>>10> test:decode_repeat().{family,[{person,25,"John"},         {person,23,"Lucy"},         {person,2,"Tony"}]}

Erlang 在erlang项目中使用protobuf