protobuf 作为配置文件

公司每个project代码中,都有一个Config类,作为模块启动的配置。其实现如下

struct Config {
 int num;
 char * file_name;
 int load_from_file(const char* filename);
}
int Config::load_from_file(const char* filename)
{
   ConfigDom dom;
   parse_node_from_file(&dom, filename);
   get_value("num", dom, this->num);
   get_value("filename", dom, this->file_name);

}

每次添加配置项,需要在在类config中添加字段,还需要添加对该字段的解析,从定义中看,字段名写了三次。能否写一次就解决问题呢?

其实,在业界有两种方案解决,一种是基于google flags的解决方案,通过命令行参数传递,这个适合参数比较少的情况(当然基于GNU的getopts也可以,个人感觉没有gflags好用)。

还有一种就是今天需要介绍的protobuf了。protobuf提供了一种textformat的序列化格式,类似json格式,清晰易读。

步骤如下

1. 定义protobuf

2. 编译之

3. 按照json格式定义配置,在代码中读入文件,解析之成protobuf结构

4. 通过protobuf结构引用变量。

无须其它工作,方便。

protobuf 作为配置文件

时间: 2024-10-12 20:54:49

protobuf 作为配置文件的相关文章

使用protobuf编写配置文件以及读写

.proto文件示例 message Configure { required string host = 1; required uint32 port = 2; } 写配置文件代码 Configure config; config.set_host("127.0.0.1");config.set_port(8080); string contect; google::protobuf::TextFormat::PrintToString(config, & contect)

protobuf 的运用

关于Protobuf protobuf是google的一个开源序列化框架,基于二进制数据交换格式,兼顾了效率和灵活性.详见http://code.google.com/p/protobuf/. 本文假定读者对protobuf已经有了初步接触,故略过一些基本和细节的描述,着重于介绍protobuf在笔者项目中的应用思路.因项目主要编程语言 是c++,所以本文的示例着眼于如何在c++中借助protobuf简化一些通用模块的处理.对于其它语言(java,python等),如果语言本身没 有更好用的特性

grpc(3):使用 golang 开发 grpc 服务端和客户端

1,关于grpc-go golang 可以可以做grpc的服务端和客户端. 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://github.com/grpc/grpc-go 和之前写的java的grpc客户端调用相同.也需要使用protobuf的配置文件. 但是golang下面的类库非常的简单,而且golang的性能也很强悍呢. 有些简单的业务逻辑真的可以使用golang进行开发. 性能强悍而且,消耗的资源也很小.java感觉上已

grpc(3):使用 golang 开发 grpc 服务端和client

1,关于grpc-go golang 能够能够做grpc的服务端和client. 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://github.com/grpc/grpc-go 和之前写的java的grpcclient调用同样.也须要使用protobuf的配置文件. 可是golang以下的类库很的简单.并且golang的性能也很强悍呢. 有些简单的业务逻辑真的能够使用golang进行开发. 性能强悍并且.消耗的资源也很小. ja

利用protobuf进行读写配置文件

利用protobuf进行读写配置文件 1.编写protobuf 的proto文件 在程序中经常会用配置文件,而利用protobuf可以很方便的进行配置文件的读写. 先编写好protobuf的proto文件 syntax = "proto3"; package msgType; enum EnumTest { TEST0 = 0x00; TEST1 = 0x01; TEST2 = 0x02; TEST3 = 0x03; } message ProtoTestSub { int32 tes

Avro、protobuf、thrift

Thrift: Thrift英 [θr?ft]美 [θr?ft]是Facebook的一个开源项目.用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python,  JavaScript, Node.js...这些编程语言间无缝结合的.高效的服务它有一个代码生成器来对它所定义的IDL定义文件自动生成服务代码框架.用户只要在其之前进行二次开发就行,对于底层的RPC通讯等都是透明的. protobuf: protocolbuffer是goo

Pomelo的Protobuf

pomelo的protobuf实现,借助了javascript的动态性,使得应用程序可以在运行时解析proto文件,不需要进行proto文件的编译.pomelo的实现中,为了更方便地解析proto文件,使用了json格式,与原生的proto文件语法是相通的,但是是不相同的.用户定义好客户端以及服务端的通信所需要的信息格式的proto文件,服务端的proto配置放在config/serverProtos.json中,客户端的proto配置放在config/clientProtos.json.如果在

WCF use ProtoBuf

    ProtoBuf有着超高的传输效率, 可以替代WCF的xml和二进制编码, 可以试一试     在VS2013中新建一个 WCF服务库, 名字使用默认的WcfServiceLibrary1     在当前解决方案再新建一个Console程序, 名字叫Client     使用nuget安装proto-net, 为什么不用最新的 2.1.0 版本呢? 因为要弹出错误 protobuf-net"已拥有为"NETStandard.Library"定义的依赖项. Instal

guava、protobuf、guice浅析

guava是Java的一个扩展类库 guava是Java的一个扩展类库,在google的许多项目中使用过了,现在最为一个 开源的Java类库广泛使用(http://code.google.com/p/guava-libraries/). guava类库扩展的主要是这些相关类:collections(集合类),concurrency(并发),primitives,reflection(反射),comparison,I/O,hashing,networking(网络),strings(字符串),ma