您好,登錄后才能下訂單哦!
據說 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
官網都有例子,把命令整理一下而已 如下 :
$ git clone https://github.com/google/protobuf.git
需要自己切換到 想編譯的版本 -- 呵呵
$ ./autogen.sh
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig
# refresh(刷新) shared(共享) library cache(緩存).
編譯安裝 -- 完畢
使用Java 那么現在來 弄 grpc 的 grpc-java 插件(其他插件是異曲同工)
如果自我覺得英文水平不錯,或者想自己去看一手文檔 -->> 請移步到(Github 文檔) 地址https://github.com/grpc/grpc-java/tree/master/compiler
首先從 github 上clone 下來 grpc-java 這個項目
$ git clone https://github.com/grpc/grpc-java.git
說是移步到 compiler
這個文件夾
$ cd $GRPC_JAVA_ROOT/compiler
執行編譯命令 ( 注意 這個玩意編譯的時候最好是 ×××吧 - 要不然呵呵 我已經試過了)
$ ../gradlew java_pluginExecutable
待編譯完成,運行這個玩意 (可以跳過試試 )
$ ../gradlew test
在 則這個文件夾(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 { CMD cmd = ; CoderVo coder = ; msg =; } CoderResponse { CMD cmd = ; Status sta = ; CoderVo coder = ; msg = ; Status { = ; = ; = ; } }
[接口實現代碼]
com.fomky.mbug.server.protobuf.CoderBasecom.fomky.mbug.server.protobuf.CoderServiceGrpcio.grpc.stub.StreamObserverorg.apache.log4j.Logger CoderServiceGrpc.CoderService { Logger = Logger.(.)(CoderBase.CoderRequest requestStreamObserver<CoderBase.CoderResponse> responseObserver) { .info(+ request)CoderBase.CoderResponse.Builder builder = 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 { = Server Logger = Logger.(.)(String[] args) Exception { = ServerBuilder.() .addService(CoderServiceGrpc.(())) .build().info(+ ).start().info(+ )Runtime.().addShutdownHook(Thread() { () { System..println()MbugServer.()System..println()} })Thread.(Integer.)} () { .shutdownNow()} }
[客戶端代碼]
(){ ManagedChannel channel = ManagedChannelBuilder.() .usePlaintext() .build()CoderServiceGrpc.CoderServiceBlockingStub stub = CoderServiceGrpc.(channel)CoderBase.CoderRequest.Builder builder = CoderBase.CoderRequest.()builder.setMsg()stub.sayHello(builder.build())builder.setCmd(CoderBase.CMD.)start = System.()(i = i < i++) { CoderBase.CoderResponse response = stub.sayHello(builder.build())} System..println(+ (System.() - start)/+ )}
移步到 github 官方正宗 ---> https://github.com/grpc/grpc-java/tree/master/examples
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。