GRPC 基于Protobuf 通信协议支持HTTP2
admin
2023-08-02 04:20:07
0

据说 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 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


相关内容

热门资讯

强台风“巴威”逼近台湾,蒋万安... 海峡导报综合报道 强台“巴威”持续逼近台湾,台北市长蒋万安9日晚表示,这次“巴威”台风是25年来暴风...
挪威队对阵英格兰队前,哈兰德发... 【环球网报道 记者 李飒】挪威队将于11日与英格兰队在美国迈阿密争夺世界杯四强席位。据英国广播公司(...
黄科大学子斩获河南省大学生金相... 7月5日,塞恩斯杯第三届河南省大学生金相大会圆满落幕。学校工学部材料成型及控制工程专业学子郭士威、代...
诺贝尔化学奖得主奥马尔·亚吉全... 清华新闻网7月3日电(记者 黄思南 摄影 李派)7月3日上午,清华大学在主楼接待厅举行奥马尔·亚吉(...
土耳其总统给每位来参会的领导人... 据凤凰卫视报道,在土耳其首都安卡拉举行的北约峰会8日落幕。作为东道主,土耳其总统埃尔多安给与会领导人...
金恩祥将军为黄河科技学院师生作... 7月6日,黄河科技学院特聘教授、马克思主义学院名誉院长、国防教育知名专家、黑龙江省军区原副司令员金恩...
消防救援部门:晋江火灾鞋厂厂房... 7月9日12时04分,福建泉州晋江市陈埭镇江头村辉腾鞋业有限公司厂房发生火灾,事故造成28人不幸遇难...
山西打造“人工智能+” 行业创... 省发展改革委、省数据局、省委网信办近日印发通知,推进山西省“人工智能+”行业创新联合体建设,加快构建...
第一观察|关键攻坚期的一次科技... 7月8日,国家科学技术奖励大会、两院院士大会、中国科协第十一次全国代表大会在北京召开。 习近平总书记...
变卦了:马斯克盛赞Anthro... IT之家 7 月 10 日消息,Anthropic 能放心把模型托管给马斯克吗?X 上有用户暗示,马...