在erlang项目中使用protobuf

在erlang项目中使用protobuf

http://blog.csdn.net/mycwq/article/details/21864191

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

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

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

[plain] view plaincopy

  1. message Person {
  2. required int32 age = 1;
  3. required string name = 2;
  4. }
  5. message Family {
  6. repeated Person person = 1;
  7. }

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

[plain] view plaincopy

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

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

[plain] view plaincopy

  1. -module(test).
  2. -compile([export_all]).
  3. -include("test_pb.hrl").
  4. encode() ->
  5. Person = #person{age=25, name="John"},
  6. test_pb:encode_person(Person).
  7. decode() ->
  8. Data = encode(),
  9. test_pb:decode_person(Data).
  10. encode_repeat() ->
  11. RepeatData =
  12. [
  13. #person{age=25, name="John"},
  14. #person{age=23, name="Lucy"},
  15. #person{age=2, name="Tony"}
  16. ],
  17. Family = #family{person=RepeatData},
  18. test_pb:encode_family(Family).
  19. decode_repeat() ->
  20. Data = encode_repeat(),
  21. test_pb:decode_family(Data).

运行代码,如下:

[plain] view plaincopy

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

文章完整例子下载:http://download.csdn.net/detail/cwqcwk1/7087293

时间: 2024-12-18 07:50:53

在erlang项目中使用protobuf的相关文章

Erlang 在erlang项目中使用protobuf

protobuf是google的一个序列化框架,类似XML,JSON,其特点是基于二进制,比XML表示同样一段内容要短小得多,还可以定义一些可选字段,广泛用于服务端与客户端通信.文章将着重介绍在erlang中如何使用protobuf. 首先google没有提供对erlang语言的直接支持,所以这里使用到的第三方的protobuf库( erlang_protobuffs ) 定义一个protobuf结构,保存为test.proto,如下: message Person { required int

项目中使用protobuf 3.0

protocol buffer从3.0 原生的compiler支持c++,Java,Python,Go,Ruby,JavaNano,JavaScript,Objective-C,C#,PHP这篇文章作为上一篇文章的补充,简单记录下一些变化. protobuf的开源地址为:https://github.com/google/protobuf protocol compiler下载地址为:https://github.com/google/protobuf/releases 官方定义message类

项目中使用protobuf

在互种系统中数据通信或数据交换可以使用protobuf,他比json.xml的数据量要小一些. 另外因为消息要单独写一个.proto文件,来生成各平台的代码,所以对跨平台通信来说也比较友好. 一.使用方法 1.编写.proto文件,定义格式 2.用所需源文件的编译器编译.proto文件,生成所需的源文件,官方的编译器只支持  ,c++.java.python,c#可以用:https://github.com/mgravell/protobuf-net 或者用我编译好的:http://pan.ba

在java项目中使用protobuf

1 通用方式 第一步,定义数据结构 第二步,使用protoc.exe生成java代码 第三步,序列化 第四步,反序列化 2 grpc方式 grpc官方推荐的方式,通过maven插件来生成java代码. 参考 https://www.cnblogs.com/liugh/p/7505533.html 原文地址:https://www.cnblogs.com/hustdc/p/9131346.html

项目中使用Redis的一些总结和体会

第一部分:为什么我的项目中要使用Redis 我知道有些地方没说到位,希望大神们提出来,我会吸取教训,大家共同进步! 注册时邮件激活的部分使用Redis 发送邮件时使用Redis的消息队列,减轻网站压力. 使用Lucene.Net在进行分词时使用Redis消息队列和多线程来避免界面卡死等性能问题. 请大家先思考一个问题:这个问题在大并发.高负载的网站中必须考虑!大家思考如何让速度更快. 三种方法:(1)数据库(2)页面静态化(3)Redis.Memcached 第二部分:Redis是什么 概述:r

【新手总结】在.Net项目中使用Redis作为缓存服务

最近由于项目需要,在系统缓存服务部分上了redis,终于有机会在实际开发中玩一下,之前都是自己随便看看写写,很零碎也没沉淀下来什么,这次算是一个系统学习和实践过程的总结. 和Redis有关的基础知识 Redis是一个开源的分布式NoSql数据库,可以用来做缓存服务.消息队列.数据存储等等,数据类型之丰富,效率之高,简直逆天!没有了解过的可以移步去问度娘~客户端之丰富,足可见它的社区有多强大: 其中C#的客户端就有这么多: 没错,我们的项目里也选择了最热门的StackExchange.Redis作

cocos2d-x lua 中使用protobuf并对http进行处理

本文介绍 cocos2d-x lua 中使用http 和 基于cocos2d-x 对lua http的封装(部分ok) 本博客链接 http://blog.csdn.net/vpingchangxin/article/details/24458051 protobuf  Google的一个非常好用的数据传输的封装 说实话Google的东西确实比較好用 所以我们前后端数据交换就用他了 只是Google没有对lua进行支持 还好社区有开源的大侠们贡献 找了全部关于lua protobuf 我仅仅找到

在Windows用Rebar来构建,编译,测试,发布Erlang项目

rebar是一个遵循 Erlang/OTP 原则的 Erlang 项目构建工具,使用它可以减少构建标准 Erlang/OTP 项目架构配置的工作量,并且可以很容易的编译.测试.发布 Erlang 应用程序.更强大的是,rebar 提供一种依赖管理机制,它可以使开发者很方便地通过 Git.Hg 等方式重用常见的第三方 Erlang 模块或库. 安装rebar 你可以在 https://github.com/rebar/rebar里下载zip包或者源代码自己编译. 在根目录下有一个文件bootstr

用Netty和Raphael来写塔防online游戏(二) - JS中使用protobuf协议

一. 简单介绍一下protobuf: Protocol Buffers are a language-neutral, platform-neutral, extensible way of serializing structured data for use in communications protocols, data storage, and more, originally designed at Google . 如今,已经有人用JS实现了protobuf协议,就是ProtoBu