grpc的编译和使用简单介绍

缘由:

        年前做的项目要从C/S变为B/S的形式,遂涉及到java和c++的交互问题,想到用rpc作为底层协议使java和c++交互更为遍历,本文将介绍grpc的windows平台编译和简单使用,及很Nice的protobuf的一些原理。

grpc的编译:

        1.从github上https://github.com/grpc/grpc克隆代码到本地。

        2.然后输入命令git submodule update --init克隆第三方软件,此时可能会遇到下载代码只有10.x k的情况,十分缓慢,这时候可以先将git同步到码云上,这样速度会变快。

        3.用cmake生成vs的解决方案,简单的命令为cmake -G "Visual Studio 16 2019 Win64" ..,或者用cmake的桌面gui工具。推荐的生成器为2017或者2019。

        4.生成vs解决方案后,打开grpc.sln,All_BUILD.vcproj后开始编译。

protobuf的介绍:

        .proto文件是一种谷歌内部使用的无视平台无视语言,可以快速序列化和反序列化的一种工具,速度比xml/json等都快的多,适用于大量的数据传输时候使用。

        下面是一个简单的例子,针对这个简单的例子对protobuf进行简单的用法说明:

         syntax = "proto3";
 
        option java_multiple_files = true;
        option java_package = "io.grpc.examples.helloworld";
        option java_outer_classname = "HelloWorldProto";
        option objc_class_prefix = "HLW";
 
        package helloworld;
 
        // The greeting service definition.
        service Greeter {
        // Sends a greeting
        rpc SayHello (HelloRequest) returns (HelloReply) {}
        }
 
        // The request message containing the user's name.
        message HelloRequest {
        string name = 1;
        }
 
       // The response message containing the greetings
       message HelloReply {
        string message = 1;
       }

       1)syntax指定的是protobuf的哪个版本,现在最新支持的是proto3版本。

       2)message相当于c++中的class或struct

       3)字段规则是 字段类型 名称 = 字段编号;

       4)字段类型分为:required/optional/repeated三种,分别对应必须出现一次,字段可能出现0到1此,字段可能出现任意次

       4)类型:int32、int64、sint32、sint64、string、32-bit等

       5)函数需要在函数前加rpc      

protobuf的原理:

       序列化、反序列化、反射;

grpc的简单应用:

        1.写.proto文件。

        2.用protoc得到cpp接口XX.pb.cc,命令为 protoc --cpp_out=. my.proto

        3.用protoc得到java接口com/grpc/XX.java,命令为 protoc --java_out=. my.proto

        4.用potoc得到grpc的接口XX.grpc.pb.cc,命令为protoc -I=. --grpc_out=./ --plugin=protoc-gen-grpc=E:/project/2020/grpc/.bulid/Release/grpc_cpp_plugin.exe my.proto

        5.建立server,这个过程遇到各种各样的链接不上的问题,需要引入grpc编译出的gpr.lib/grpc.lib/libprotobuf.lib/zip.lib/upb.lib/cares.lib/address_sorting.lib等。若报ssl_support的错误需要重新编译openssl或者用grpc_unsecure.lib或grpc++_unsercure的库。

        6.建立client,重复上述5中的操作即可建立一个简单的rpc服务器。

遇到的错误:    

#error \

    "Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)"

         这个需要增加宏定义设置_WIN32_WINNT=0x600

        ServerBuilder这个类链接不上,需要加入protoc生成的文件XX.pd.cpp/XX.grpc.pd.cpp

 

grpc-java的使用:

       利用git导下代码 git clone  https://github.com/grpc/grpc-java.git

       java,clone下的代码就是realse版本,可以直接使用,打开上述步骤的c++的grpc服务器,然后使用grpc的快启动来测试程序,关于grpc的快启动的网页地址是https://www.grpc.io/docs/quickstart/java/。测试结果成功,返回正确的结果。

结束:

       至此关于利用grpc的方式令java和c++两种平台语言交互成功。

                 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值