protobuf

简介

protobuf是一种先进的用于通信协议、数据存储的数据序列化方法。 
比xml性能好很多,用起来也不复杂,类似json。但是由于二进制存储,数据无法直接可读, 不能自描述,需要通过引入mesage+proto文件来描述。所以他不能像xml,json那样用于配置文件。

语法

repeated optional required

import

https://developers.google.com/protocol-buffers/docs/proto

c++

has 
add 
mutable

java

Builders vs. Messages

message: immutable  创建后不能修改

builder: build() 生成一个message。

参考资料  

Protocol Buffer Basics: Java

protoc

 

问题排查

1、多版本兼容问题

有时,系统需要用到多个版本的pb。如何能够保障编译通过呢?

rpm依赖的proto: so文件  include文件

t-kgb-protobuf-2_5_0-1.0.2-465607.el5.x86_64.rpm

2、dlopen链接protbuf.so 

(1) protobuf 用到了一些全局变量。linking protobuf dynamically with dlopen across several modules are very problematic. I'm not aware of any good solution here.

(2) 在Linux上编译google protobuff时,configure 默认选项是生成动态库,即libprotobuf.so文件。如果同时在多个动态库(动态库以dlopen方式动态加载)中使用同一buff结构,则运行时会报错误:

 

参考资料

  1. 开发者文档 编程指导 编码方式 api proto文件 样式
  2. google ProtoBuf开发者指南
  3. Google Protocol Buffer 的使用和原理
  4. 开源点评:Protocol Buffers介绍
posted @ 2016-08-29 13:39  EDPL  阅读(283)  评论(0)    收藏  举报