缘由:
年前做的项目要从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++两种平台语言交互成功。