溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

GRPC 基于Protobuf 通信協(xié)議支持HTTP2

發(fā)布時間:2020-07-12 02:22:13 來源:網(wǎng)絡 閱讀:1564 作者:Fomkys 欄目:開發(fā)技術(shù)

據(jù)說 GRPC 是那個啥基于 Protobuf3 做的, 百度一下沒有相關(guān)的文檔,那就只有自己扣官網(wǎng)文檔了

編輯時間 : 2016-01-24 18:13:39

首先是準備環(huán)境

我是用的linux 環(huán)境

礙于Protobuf 官網(wǎng)需要×××,所以有條件的×××看看官網(wǎng)有木有,編譯好的包(此刻沒有啊,只找到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

官網(wǎng)都有例子,把命令整理一下而已 如下 :

$ git clone https://github.com/google/protobuf.git
需要自己切換到 想編譯的版本 -- 呵呵
$ ./autogen.sh
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig
# refresh(刷新) shared(共享) library cache(緩存).

編譯安裝 -- 完畢

使用Java 那么現(xiàn)在來 弄 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

執(zhí)行編譯命令 ( 注意 這個玩意編譯的時候最好是 ×××吧 - 要不然呵呵 我已經(jīng)試過了)

$ ../gradlew java_pluginExecutable

待編譯完成,運行這個玩意 (可以跳過試試 )

$ ../gradlew test

在 則這個文件夾(build/binaries/java_pluginExecutable/) 找到 protoc-gen-grpc-java 文件 主要是這個文件起作用喲

不不想編譯的 到網(wǎng)盤下載去 鏈接: 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

說明一下參數(shù)

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

--grpc-java_out : 這個不用多說了 生成代碼輸出位置

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

--proto_path : 源文件目錄 , 空格 后啊面需要 跟隨 .proto 文件名稱

生成結(jié)束 ---

代碼呵呵

[.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 {
        = ;
        = ;
        = ;
    }
}


[接口實現(xiàn)代碼]

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


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI