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生成的源文件尽可能不要去修改,如果想进行扩展,那么请继承生成的类,这样的好处是将来更新接口的时候,可以直接替换掉对应的源文件而不需要人工去比较更新。
相关推荐
RPC是一种远程调用的通信协议,例如dubbo、thrift等,我们在互联网高并发应用开发时候都会使用到类似的服务。本专题主要通过三个章节实现一个rpc通信的基础功能,来学习RPC服务...- 手写RPC框架第三章《RPC中间件》
本篇将详细讲解如何使用socket、反射和序列化等技术来实现一个简单的RPC框架。 首先,让我们了解RPC的基本原理。在RPC模型中,客户端(Client)发起一个函数调用请求,这个请求包含了目标函数的名称和参数。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++...
跟语言平台绑定的开源RPC框架主要有下面几种。Dubbo:国内最早开源的RPC框架,由阿里巴巴公司开发并于2011年末对外开源,仅支持 Java语言。 Motan:微博内部使用的RPC框架,于2016年对外开源,仅支持Java语言。 Tars...
详细讲解RPC
Python中的RPC(Remote Procedure Call)框架是用于分布式系统中不同进程间进行通信的重要工具,它使得开发者可以像调用本地函数一样调用远程服务。在本主题中,我们将重点讨论基于zerorpc和gevent的高效RPC命令调用...
RPC(Remote Procedure Call)框架是分布式系统中的一种通信机制,它允许一个程序在不理解远程系统内部细节的情况下,像调用本地方法一样调用远程系统的功能。基于Dubbo实现的RPC框架,是Java开发中常见的一种高效率...
Java使用传统Socket手写的远程RPC(Remote Procedure Call)框架是一种实现分布式系统中不同节点间通信的技术。RPC允许一个程序在不关心远程系统具体实现的情况下,调用另一个远程系统的功能,就像是调用本地方法...
本文介绍了一种名为RPC-DDSF(Remote Procedure Call - Distributed Data Sharing Framework)的分布式数据共享框架,该框架建立在Sun公司的ONC RPC(Open Network Computing Remote Procedure Call)框架基础之上。...
标题中的“可参考的自定义实现rpc框架”指的是一个关于如何设计和实现远程过程调用(RPC)框架的教程或示例项目。RPC允许不同计算机系统间的程序进行通信,仿佛它们是在同一台机器上直接调用函数一样。下面将详细...
在Java世界中,JSON-RPC作为一个高性能的开源RPC框架,为分布式系统中的服务调用提供了便利。这个框架允许应用程序通过网络在不同的进程之间传递方法调用,仿佛这些方法是在本地对象上调用一样。 JSON-RPC的核心...
RPC(Remote Procedure Call)框架是分布式系统中广泛使用的通信机制,它允许一个程序在不关心远程服务器具体实现的情况下调用其方法,就像调用本地对象一样。本篇将深入探讨RPC框架的底层模拟,主要围绕以下几个...
RPC(Remote Procedure Call)框架是分布式系统中的一种通信机制,允许一个程序调用另一个不在同一台计算机上的程序,使得远程服务调用就像本地调用一样简单。在这个场景中,你提到的是你自己编写了一个RPC框架,这...
在本场景中,我们关注的是一个名为“nfs-rpc”的高性能RPC框架。NFS(Network File System)最初是UNIX系统间用于文件共享的协议,而这里的“nfs-rpc”可能是指将NFS协议与RPC概念相结合的一种实现,旨在提供高效的...
Thrift RPC客户端的服务化框架代码主要涉及了两个关键概念:Thrift和RPC(Remote Procedure Call,远程过程调用)。Thrift是由Facebook开发的一种开源跨语言服务框架,它允许定义数据类型和服务接口,然后自动生成...
本项目旨在基于C++语言实现一个RPC分布式网络通信框架项目,使用CMake在Linux平台上构建编译环境。它可以将任何单体架构系统的本地方法调用重构为基于TCP网络的RPC远程方法调用。该框架实现了同一台机器的不同进程...
在本项目中,我们将基于Netty实现一个手写的RPC框架。Netty是Java领域的一个高性能、异步事件驱动的网络应用程序框架,常用于构建高效的服务器和客户端。 首先,我们需要理解RPC框架的基本组成部分: 1. **服务...
基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-...
RPC(Remote Procedure Call)框架是分布式系统中广泛使用的通信机制,允许一个进程调用另一个进程中定义的方法,就像调用本地方法一样。在这个“JAVA实现简单RPC框架”的项目中,我们将探讨如何利用Java的核心特性...
在分布式计算领域,Hadoop RPC(Remote Procedure Call)框架是一个至关重要的组件,它允许不同的进程之间进行通信,尤其是在大规模数据处理的场景下。Hadoop RPC是Hadoop生态系统中的基础服务,使得不同模块如HDFS...