据说 GRPC 是那个啥基于 Protobuf3 做的, 百度一下没有相关的文档,那就只有自己扣官网文档了

编辑时间 : 2016-01-24 18:13:39

首先是准备环境

我是用的linux 环境

碍于Protobuf 官网需要×××,所以有条件的×××看看官网有木有,编译好的包(此刻没有啊,只找到win32版本的)

苦逼的编译了大半天啊

说正事 :

首先我们要 编译安装 protobuf3

Window下编译这边 --https://github.com/google/protobuf/tree/master/cmake

对windows不熟悉 - 真是对不住了啊

准本工作 : 安装 git

$ sudo apt-get -y install git

$ sudo apt-get install autoconf automake libtool curl

官网都有例子,把命令整理一下而已 如下 :

$gitclonehttps://github.com/google/protobuf.git

需要自己切换到想编译的版本--呵呵

$./autogen.sh

$ ./configure$ make$ make check$ sudo make install

$sudoldconfig

#refresh(刷新)shared(共享)librarycache(缓存).

编译安装 -- 完毕

使用Java 那么现在来 弄 grpc 的 grpc-java 插件(其他插件是异曲同工)

如果自我觉得英文水平不错,或者想自己去看一手文档 -->> 请移步到(Github 文档) 地址https://github.com/grpc/grpc-java/tree/master/compiler

首先从 github 上clone 下来 grpc-java 这个项目

$ git clonehttps://github.com/grpc/grpc-java.git

说是移步到compiler这个文件夹

$cd$GRPC_JAVA_ROOT/compiler

执行编译命令 ( 注意 这个玩意编译的时候最好是 ×××吧 - 要不然呵呵 我已经试过了)

$../gradlewjava_pluginExecutable

待编译完成,运行这个玩意 (可以跳过试试 )

$../gradlewtest


在 则这个文件夹(build/binaries/java_pluginExecutable/) 找到protoc-gen-grpc-java 文件 主要是这个文件起作用哟

不不想编译的 到网盘下载去 链接: http://pan.baidu.com/s/1qX66mSG 密码: ik3h


OK 下面来重点了 使用插件 生成 service


$ protoc --plugin=protoc-gen-grpc-java=/home/cxx/soft/protoc-gen-grpc-java --grpc-java_out=./src --proto_path=./ *.proto

说明一下参数

--plugin : 插件名称 后面等号是指定 插件程序的位置

--grpc-java_out : 这个不用多说了 生成代码输出位置

其他用法(nano) :--grpc-java_out=nano=true:"$OUTPUT_FILE"

--proto_path : 源文件目录 , 空格 后啊面需要 跟随 .proto 文件名称

生成结束 ---

代码呵呵

[.proto 文件]

=;java_package=;java_outer_classname=;CoderVo{cid=;email=;phone=;pass=;name=;sex=;img=;birth=;age=;remark=;profession=;company=;poskey=;city=;lvl=;exp=;bug=;fbug=;dbug=;rbug=;rname=;card=;SEX{=;=;}}

[包含Service的]

=;java_package=;java_outer_classname=;;CoderService{SayHello(CoderRequest)(CoderResponse);}CMD{=;=;=;=;}CoderRequest{CMDcmd=;CoderVocoder=;msg=;}CoderResponse{CMDcmd=;Statussta=;CoderVocoder=;msg=;Status{=;=;=;}}


[接口实现代码]

com.fomky.mbug.server.protobuf.CoderBasecom.fomky.mbug.server.protobuf.CoderServiceGrpcio.grpc.stub.StreamObserverorg.apache.log4j.LoggerCoderServiceGrpc.CoderService{Logger=Logger.(.)(CoderBase.CoderRequestrequestStreamObserver<CoderBase.CoderResponse>responseObserver){.info(+request)CoderBase.CoderResponse.Builderbuilder=CoderBase.CoderResponse.()builder.setCmd(request.getCmd())builder.setMsg(request.getMsg())responseObserver.onNext(builder.build())responseObserver.onCompleted()(request.getCmd()){:{}:{}:{}:{}}}}


[启动服务代码]

com.fomky.mbug.server.coder.service.CoderServiceImplcom.fomky.mbug.server.protobuf.CoderServiceGrpcio.grpc.Serverio.grpc.ServerBuilderorg.apache.log4j.LoggerMbugServer{=ServerLogger=Logger.(.)(String[]args)Exception{=ServerBuilder.().addService(CoderServiceGrpc.(())).build().info(+).start().info(+)Runtime.().addShutdownHook(Thread(){(){System..println()MbugServer.()System..println()}})Thread.(Integer.)}(){.shutdownNow()}}

[客户端代码]

(){ManagedChannelchannel=ManagedChannelBuilder.().usePlaintext().build()CoderServiceGrpc.CoderServiceBlockingStubstub=CoderServiceGrpc.(channel)CoderBase.CoderRequest.Builderbuilder=CoderBase.CoderRequest.()builder.setMsg()stub.sayHello(builder.build())builder.setCmd(CoderBase.CMD.)start=System.()(i=i<i++){CoderBase.CoderResponseresponse=stub.sayHello(builder.build())}System..println(+(System.()-start)/+)}


移步到github官方正宗--->https://github.com/grpc/grpc-java/tree/master/examples