GithubHelp home page GithubHelp logo

haoqoo / protobuf-rpc Goto Github PK

View Code? Open in Web Editor NEW

This project forked from bennygao/protobuf-rpc

0.0 2.0 0.0 10.48 MB

protobuf-rpc is a RPC framework based on Google ProtocolBuffer. Currently protobuf-rpc supports services and messages definition and code generation for cocoa Objective-C and Java.

Java 12.59% Shell 0.59% Batchfile 0.19% Ruby 0.01% C 0.43% Objective-C 79.63% C++ 1.18% Protocol Buffer 4.31% CSS 1.08%

protobuf-rpc's Introduction

What is protobuf-rpc?

protobuf-rpc是一个基于google ProtocolBuffer的远程方法调用(RPC))实现,服务器端当前仅支持Java(JDK 1.7及以上),客户端支持Objective-C(cocoa/iOS)和Java(J2SE/Android)。

Why protobuf-rpc?

对于纯的基于Windows或者Linux的服务器来说,RPC的解决方案很多,WebService、Zero-ICE、Caucho Hessian等等,但是对于需要同时支持iOS、Android的移动App开发来说,可选的解决方案一下子变得很少。

适合移动App开发的RPC应该具备什么特征?

  • 同时支持iOS、Android和服务器端

毋庸置疑,对于移动端的平台来说,iOS和Android同样重要,iOS和Android的开发语言Objective-C和Android Java差别又是如此之大,仅能支持其中一种平台的方案不能满足要求,未来可能还需要能够支持WindowsPhone。

  • 更小的网络通讯报文体积

尤其在**的运营商网络环境下,用户对于流量的消耗是比较敏感的,如果App能够更小的消耗用户网络流量,不仅通讯速度更快一些,对于用户综合体验也更加好。

  • 客户端和服务器之间对等的相互调用能力

传统意义上的Client/Server结构,客户端主动向服务器发送服务请求,服务器端处理后,返回响应给客户端。但是随着App功能的丰富,例如实现聊天室功能时,一个用户的聊天消息发送到服务器后,服务器要能够实时推送到其他在线用户的客户端,此时传统的Client/Server结构就很麻烦,因为从请求和服务的角度来说,服务器变成了请求方,客户端变成了服务提供方。

protobuf-rpc是一个具备以上特征、特定面向移动App开发,提供iOS、Android和服务器端的RPC实现。

protobuf-rpc同时支持iOS Objective-C、Android Java和服务器端Java。

protobuf-rpc在网络连接层面使用TCP长连接,减少了连接建立次数。应用层数据使用Google ProtocolBuffer来定义服务,ProtocolBuffer是由Google开发的一种数据序列化协议(类似于XML、JSON、hessian),ProtocolBuffer能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面。相比XML、JSON,ProtocolBuffer序列化后的报文体积小很多。

protobuf-rpc能够让Client和Server对等地、灵活地相互调用对方提供的服务。

安装

依赖

需要JDK1.7或以上版本的java运行环境。

从源代码编译

> git clone http://test.yingshibao.com:8889/bennygao/protobuf-rpc.git
> cd protobuf-rpc
> gradle build
> gradle build

把protobuf-rpc/bin的路径增加到PATH环境变量中。

linux 和 macosx:

> export PATH=$PATH:path-to-protobuf-rpc/bin

windows:

> SET PATH=%PATH%;path-to-protobuf-rpc\bin

模块及目录说明

  • bin 存放执行脚本以及编译好的jar文件。
  • lib 存放项目依赖的外部jar文件。
  • proto 存放示例工程的proto定义文件,services.proto和messages.proto。
  • core protobuf-rpc的核心类,client和server都需要。
  • nio java nio实现的Endpoint, client需要。
  • mina apache mina-2.0.9 实现的Endpoint,server需要。
  • client java client示例代码。
  • server java server示例代码。
  • cocoa macosx以及iOS objective-c示例工程。
  • android Android示例工程。

编译proto文件生成代码

protobuf-rpc当前支持生成java和objective-c代码。

生成java代码

假设java项目工程的目录结构如下:

[your-app-proj]
|
+---[src]
    | 
    +---[main]
        |
        +---[java]

linux 和 macosx

> pbrpcc -g java -o path-to-your-app-proj/src/main/java -p your-proto.proto

windows

> pbrpcc -g java -o path-to-your-app-proj\src\main\java -p your-proto.proto

命令执行完成后,会在your-app-proj/src/main/java目录下根据proto文件中option java_package选项设定的java package自动创建子目录。例如proto文件中设定option java_package = "com.yingshibao.app.idl";的话,java代码将被生成到your-app-proj/src/main/java/com/yingshibao/app/idl目录下。

生成objective-c代码

protobuf-rpc当前仅支持在macosx环境下生成objective-c代码。

> pbrpcc -g objc -o path-to-your-app-proj -p your-proto.proto

命令运行完成后,会在-o选项指定的目录下生成两个.h头文件和两个.m实现文件,文件名根据proto文件中的package选项设定,例如proto文件中设定了package yingshibao;,则生成的4个源代码文件分别为Yingshibao.pb.h Yingshibao.pb.m Yingshibao.rpc.h Yingshibao.rpc.m

protobuf-rpc's People

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.