码迷,mamicode.com
首页 > 其他好文 > 详细

Erlang 在erlang项目中使用protobuf

时间:2014-10-13 14:15:49      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:http   使用   ar   文件   sp   on   代码   ef   bs   

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 = encode(),
	test_pb:decode_person(Data).

encode_repeat() ->
	RepeatData =
	[
		#person{age=25, name="John"},
		#person{age=23, name="Lucy"},
		#person{age=2, name="Tony"}
	],
	Family = #family{person=RepeatData},
	test_pb:encode_family(Family).
	
decode_repeat() ->
	Data = encode_repeat(),
	test_pb:decode_family(Data).

运行代码,如下:

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

标签:http   使用   ar   文件   sp   on   代码   ef   bs   

原文地址:http://www.cnblogs.com/unqiang/p/4021889.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!