google protocol buffer的原理和使用(四)

原创 2015年07月10日 10:21:55

有个电子商务的系统(假设用C++实现),其中的模块A需要发送大量的订单信息给模块B,通讯的方式使用socket。
假设订单包括如下属性:
--------------------------------
  时间:time(用整数表示)
  客户id:userid(用整数表示)
  交易金额:price(用浮点数表示)
  交易的描述:desc(用字符串表示)
--------------------------------
  如果使用protobuf实现,首先要写一个proto文件(不妨叫Order.proto),在该文件中添加一个名为"Order"的message结构,用来描述通讯协议中的结构化数据。该文件的内容大致如下:

--------------------------------

message Order
{
  required int32 time = 1;
  required int32 userid = 2;
  required float price = 3;
  optional string desc = 4;
}

--------------------------------


  然后,使用protobuf内置的编译器编译 该proto。由于本例子的模块是C++,你可以通过protobuf编译器的命令行参数(看“这里 ”),让它生成C++语言的“订单包装类”。(一般来说,一个message结构会生成一个包装类)
  然后你使用类似下面的代码来序列化/解析该订单包装类:


--------------------------------

// 发送方

Order order;
order.set_time(XXXX);
order.set_userid(123);
order.set_price(100.0f);
order.set_desc("a test order");

string sOrder;
order.SerailzeToString(&sOrder);

// 然后调用某种socket的通讯库把序列化之后的字符串发送出去
// ......

--------------------------------

// 接收方

string sOrder;
// 先通过网络通讯库接收到数据,存放到某字符串sOrder
// ......

Order order;
if(order.ParseFromString(sOrder))  // 解析该字符串
{
  cout << "userid:" << order.userid() << endl
          << "desc:" << order.desc() << endl;
}
else
{
  cerr << "parse error!" << endl;
}

--------------------------------


  有了这种代码生成机制,开发人员再也不用吭哧吭哧地编写那些协议解析的代码了(干这种活是典型的吃力不讨好)。
  万一将来需求发生变更,要求给订单再增加一个“状态”的属性,那只需要在Order.proto文件中增加一行代码。对于发送方(模块A),只要增加一行设置状态的代码;对于接收方(模块B)只要增加一行读取状态的代码。哇塞,简直太轻松了!
  另外,如果通讯双方使用不同的编程语言来实现,使用这种机制可以有效确保两边的模块对于协议的处理是一致的。
  顺便跑题一下。
  从某种意义上讲,可以把proto文件看成是描述通讯协议的规格说明书(或者叫接口规范)。这种伎俩其实老早就有了,搞过微软的COM编程或者接触过CORBA的同学,应该都能从中看到IDL(详细解释看“这里 ”)的影子。它们的思想是相通滴。

[转]Google Protocol Buffer 的使用和原理

简介: Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、...
  • heiyeshuwu
  • heiyeshuwu
  • 2011年05月24日 19:47
  • 22337

Java中使用Protocol Buffer

一、Protocol Buffer简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简...
  • yubo_725
  • yubo_725
  • 2016年08月16日 13:21
  • 2547

Google Protocol Buffer安装及在python中的使用

安装 1. 下载protobuf源代码(当前最新版本为:2.5.0)  #cd /opt  #wget https://protobuf.googlecode.com/files/protobuf...
  • u010029983
  • u010029983
  • 2015年10月09日 11:27
  • 2778

Google Protocol Buffer介绍

转自:http://www.usidcbbs.com/simple/?t5565.html 简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的...
  • yaonai2003
  • yaonai2003
  • 2014年02月20日 21:55
  • 11185

windows以及linux 环境下Google Protocol Buffer 下载编译安装教程

protobuf的全称是Protocol Buffer,它是google 的一种数据交换的格式,可用于用于分布式应用之间的数据通信或者异构环境下的数据交换。 /////////////////...
  • shaderdx
  • shaderdx
  • 2015年09月24日 16:13
  • 1696

【Google Protocol Buffers】Protocol Buffer基础:C++篇

注:这是本人的翻译,可能不准确,可能有错误,但是基本上可以理解,希望能对大家有所帮助!(转载请注明出处:本文来自learnhard的博客:http://www.codelast.com/ & http...
  • ghlfllz
  • ghlfllz
  • 2011年04月18日 21:13
  • 5081

Google Protocol buffer 系列二: 常用api

What Are Protocol Buffers? Protocol buffers are Google's language-neutral, platform-neutral, exten...
  • scut1135
  • scut1135
  • 2013年11月14日 23:16
  • 2206

快来看看Google出品的Protocol Buffer,别只会用Json和XML了

前言 习惯用 Json、XML 数据存储格式的你们,相信大多都没听过Protocol BufferProtocol Buffer 其实 是 Google出品的一种轻量 & 高效的结构化数据存储格...
  • aptentity
  • aptentity
  • 2017年03月29日 23:20
  • 835

caffe源码学习(一) google protocol buffer

caffe源码学习 protocol buffer
  • u011104550
  • u011104550
  • 2016年04月24日 11:27
  • 1491

一个基于protocol buffer的RPC实现

一个基于protocol buffer的RPC实现 Protocol Buffer仅仅是提供了一套序列化和反序列化结构数据的机制,本身不具有RPC功能,但是可以基于其实现一套RP...
  • u010064842
  • u010064842
  • 2015年04月15日 22:52
  • 1333
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:google protocol buffer的原理和使用(四)
举报原因:
原因补充:

(最多只允许输入30个字)