【转载】在erlang项目中使用protobuf
2017-04-20 20:46
211 查看
protobuf是google的一个序列化框架,类似XML,JSON,其特点是基于二进制,比XML表示同样一段内容要短小得多,还可以定义一些可选字段,广泛用于服务端与客户端通信。文章将着重介绍在erlang中如何使用protobuf。
首先google没有提供对erlang语言的直接支持,所以这里使用到的第三方的protobuf库(erlang_protobuffs)
定义一个protobuf结构,保存为test.proto,如下:
[plain] view
plain copy
message Person {
required int32 age = 1;
required string name = 2;
}
message Family {
repeated Person person = 1;
}
编译这个protobuf结构,生成相应的erlang代码:
[plain] view
plain copy
% 生成相应的erl和hrl文件
protobuffs_compile:scan_file_src("test.proto").
% 生成相应的beam和hrl文件
protobuffs_compile:scan_file("test.proto").
下面我们以例子简单说明如何使用:
[plain] view
plain copy
-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).
运行代码,如下:
[plain] view
plain copy
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"}]}
作者:【没有开花的树】
出处:http://blog.csdn.net/mycwq/article/details/42060641
首先google没有提供对erlang语言的直接支持,所以这里使用到的第三方的protobuf库(erlang_protobuffs)
定义一个protobuf结构,保存为test.proto,如下:
[plain] view
plain copy
message Person {
required int32 age = 1;
required string name = 2;
}
message Family {
repeated Person person = 1;
}
编译这个protobuf结构,生成相应的erlang代码:
[plain] view
plain copy
% 生成相应的erl和hrl文件
protobuffs_compile:scan_file_src("test.proto").
% 生成相应的beam和hrl文件
protobuffs_compile:scan_file("test.proto").
下面我们以例子简单说明如何使用:
[plain] view
plain copy
-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).
运行代码,如下:
[plain] view
plain copy
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"}]}
作者:【没有开花的树】
出处:http://blog.csdn.net/mycwq/article/details/42060641
相关文章推荐
- 在erlang项目中使用protobuf
- Erlang 在erlang项目中使用protobuf
- 在erlang项目中使用protobuf
- 【转载】10.1\t使用项目视图类(Using the Item View Convenience Classes)
- 【转载】使用Unity开发项目的一点经验
- 【转载】10.1\t使用项目视图类(Using the Item View Convenience Classes)
- 转载】使用Unity开发项目的一点经验
- [dika 记录] erlang游戏网关,及一些第三方erlang开源项目的使用
- 开源gis项目Mitab在C#中的使用方法(转载)
- [转载]使用Maven进行项目管理
- 使用cvs或svn从sourceforge上获取开源项目的方法[转载]
- 如何:使用向导来处理项目模板 【转载】
- Protobuf在java项目中的使用
- 使用Ant进行项目构建之一:环境搭建 (转载)
- 项目中使用Quartz集群分享--转载
- 使用IntelliJ IDEA开发erlang项目
- 使用Google Code项目托管实现资料共享(转载)
- 如何:使用向导来处理项目模板 【转载】
- 【转载】使用Json比用string返回数据更友好,也更面向对象一些 |Asp.net MVC 2.0 + Unity 2.0(IoC) + EF4.0 实例:RoRoWoBlog 开源项目框架代码
- 项目使用Entity Framework用到的公共操作方法基类(Repository)及其使用 (转载)