protobuf使用总结(c++和php版本)
一、protobuf的优点:
灵活(方便接口更新)、高效(效率经过google的优化,传输效率比普通的XML等高很多);易于使用;多语言支持;原生支持c++,java,python,第三方扩展支持更多语言,详见:http://code.google.com/p/protobuf/wiki/ThirdPartyAddOns
二、protobuf的编译及使用:
c++版(官方版)下载源码编译出libprotoc.lib和libprotobuf.lib两个库,并添加到工程的lib include中对于visual studio环境,直接运行protobuf/vsprojects/protobuf.sln进行编译vs2010下编译protobuf存在编译不过的bug:protobuf error C2039: 'type' : is not a member of 'std::tr1::tuple_element'
原因在于runtime library版本错乱的问题,因为不是太大的问题,所以作者并没有及时发布这个问题的fixed版本,只好自己解决。
解决方法:将工程中的其他project全部unload,只编译libprotobuf和libprotoc两个project注意:根据你工程的编译属性,选择对应的lib库版本,例如debug对应的debug版本的protobuf lib库将生成的lib库添加到工程设置中,或者在相应的源码处添加:
#pragma comment(lib,"libprotoc.lib")
#pragma comment(lib,"libprotobuf.lib")下载protobuf源码编译器(用来将.proto文件生成对应的.h和.cc),这个源码编译器也可以自己从protobuf的源码中编译出,前提是protobuf.sln在你的编译环境中能够编译通过。运行protobuf/vsprojects/extract_includes.bat生成include文件,将这些文件加入到工程的头文件include中;设计编写.proto文件:具体可以参考官方的教程
需要注意的是:repeat关键词。该关键词的作用是表明关键词所修饰的数据结构会被多次重复传送,例如一个人有多个电话号码,那么在传输这个人的信息时,会传送多个类型为phone type的电话号码;这时,phone type就被声明为repeatPHP版(第三方扩展版)php版的protobuf是由kordulla编写的非官方版本,但被官方列为正规的第三方版本库,可以在这里下载到。
php版就不存在编译lib库的问题了,可以直接上马使用。
具体使用过程:将压缩包解压到apache对应的wwwroot目录的protobuf下;
将自己编写好的.proto文件(例如mysql.proto)放到protobuf/parser中;
这里注意:php版本不支持c++中的namespace,所以如果.proto文件中有package语句需要将其删除。建立一个myparser.php文件存放编译命令:
<?php
require_once('./pb_parser.php');
$parser = new PBParser();
$parser->parse('./mysql.proto');
echo ‘parse successfully!’;
?>
在浏览器中运行myparser.php进行源码生成;将生成的pb_proto_mysql.php复制到你的工程目录中即可;
pb_proto_mysql.php的使用方法和c++版的类似,具体可以参见php版的protobuf/example/test.php
有时候需要自己去看看pb_proto_mysql.php的源码从而获取准确的接口接口的更新:对于采用protobuf的工程来说,传输数据结构的更新非常简单,只需要修改对应的.proto文件,并重新生成对应的c++和php源文件即可。
这里要注意的是:
用.proto生成的源文件尽可能不要去修改,如果想进行扩展,那么请继承生成的类,这样的好处是将来更新接口的时候,可以直接替换掉对应的源文件而不需要人工去比较更新。
相关推荐
jsonrpc是一个基于Java的高性能开源RPC框架
RPC是一种远程调用的通信协议,例如dubbo、thrift等,我们在互联网高并发应用开发时候都会使用到类似的服务。本专题主要通过三个章节实现一个rpc通信的基础功能,来学习RPC服务...- 手写RPC框架第三章《RPC中间件》
基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++...
基于dubbo实现的rpc框架RPC 框架指的是:可以让客户端直接调用服务端方法就像调用本地方法一样简单的框架,比如我前面介绍的 Dubbo、Motan、gRPC 这些.zip
详细讲解RPC
利用Java开发的socket客户端和服务端远程RPC通信框架,利用了动态代理和反射技术,
使用socket/反射/序列化等技术实现了一个基本的远程调用框架,可参考博客http://blog.csdn.net/u013177446/article/details/66473066
高效的RPC命令调用框架 特点: 基于优秀的zerorpc和gevent框架 支持心跳检测、命令调用超时和rpc调用超时 完善的异常处理机制 底层命令支持管道,同时支持多种命令调用方式
Thrift RPC客户端的服务化框架代码,
基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-...
c# rpc框架c# rpc框架c# rpc框架c# rpc框架c# rpc框架
高性能RPC框架 nfs-rpc.7z
公司内部培训讲义,Dubbo-RPC分布式服务框架
基于C++ module库 Protobuf Zookeeper 实现的Rpc框架.zip基于C++ module库 Protobuf Zookeeper 实现的Rpc框架.zip基于C++ module库 Protobuf Zookeeper 实现的Rpc框架.zip基于C++ module库 Protobuf Zookeeper 实现...
Hadoop自己的Rpc框架使用Demo。可以在自己的项目中用Hadoop的Rpc框架了。
基于java aio 的RPC 远程调用框架
分布式RPC系统框架-Dubbo(2.7)教程(4.31G) 〖课程介绍〗: 分布式RPC系统框架-Dubbo(2.7)教程 〖课程目录〗: 〖视频截图〗:
服务治理框架,一般存在与RPC的上一层,用来在大量RPC服务至上,协调客户端和服务器的调用工作。这个示例工程和我的博客《架构设计:系统间通信(13)——RPC实例Apache Thrift 下篇》...
CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)
基于netty的手写rpc框架。