mingw c++/qt使用grpc方法详细教程

1. RPC框架


RPC框架是什么
RPC 框架说白了就是让你可以像调用本地方法一样调用远程服务提供的方法,而不需要关心底层的通信细节。简单地说就让远程服务调用更加简单、透明。 RPC包含了客户端(Client)和服务端(Server)
业界主流的 RPC 框架整体上分为三类:

1> 支持多语言的RPC框架,比较成熟的有Google的gRPC、Apache(Facebook)的Thrift;
2> 只支持特定语言的RPC框架,例如新浪微博的Motan;
3> 支持服务治理等服务化特性的分布式服务框架,其底层内核仍然是 RPC 框架, 例如阿里的 Dubbo

2. GRPC简介


在GRPC里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多RPC系统类似,gRPC也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个GRPC服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。
在这里插入图片描述
GRPC调用流程:
1> 客户端(gRPC Stub)调用 A 方法,发起 RPC 调用。
2> 对请求信息使用 Protobuf 进行对象序列化压缩(IDL)。
3> 服务端(gRPC Server)接收到请求后,解码请求体,进行业务逻辑处理并返回。
4> 对响应结果使用 Protobuf 进行对象序列化压缩(IDL)。
5> 客户端接受到服务端响应,解码请求体。回调被调用的 A 方法,唤醒正在等待响应(阻塞)的客户端调用并返回响应结果

===================================================================
概念部分讲完,grpc支持多语言跨平台,这里接下来咱们重点讲解c++如何使用grpc,方法很多,咱们这里只分析两种使用方式:
1> mingw源代码编译使用的方式
2> Qt调用grpc

3. 下载grpc


git clone [-b v1.50.0] https://github.com/grpc/grpc 
git submodule update --init

注意:
1> 这里[-b v1.50.0]表示可以指定对应的版本号,也可以不加,默认下载master的grpc源码
2> submodule比较慢的情况下可以考虑换个源,修改grpc/.gitmodules,将内容替换为:

[submodule "third_party/abseil-cpp"]
	path = third_party/abseil-cpp
	url = https://gitee.com/suuair/abseil-cpp.git
[submodule "third_party/benchmark"]
	path = third_party/benchmark
	url = https://gitee.com/chahan/benchmark.git
[submodule "third_party/bloaty"]
	path = third_party/bloaty
	url = https://gitee.com/GgBoy_ssz/bloaty.git
[submodule "third_party/boringssl-with-bazel"]
	path = third_party/boringssl-with-bazel
	url = https://gitee.com/GgBoy_ssz/boringssl.git
[submodule "third_party/cares/cares"]
	path = third_party/cares/cares
	url = https://gitee.com/RicLee/c-ares.git
[submodule "third_party/envoy-api"]
	path = third_party/envoy-api
	url = https://gitee.com/RicLee/data-plane-api.git
[submodule "third_party/googleapis"]
	path = third_party/googleapis
	url = https://gitee.com/GgBoy_ssz/googleapis.git
[submodule "third_party/googletest"]
	path = third_party/googletest
	url = https://gitee.com/bosspoi/googletest.git
[submodule "third_party/libuv"]
	path = third_party/libuv
	url = https://gitee.com/RicLee/libuv.git
[submodule "third_party/opencensus-proto"]
	path = third_party/opencensus-proto
	url = https://gitee.com/RicLee/opencensus-proto.git
[submodule "third_party/opentelemetry"]
	path = third_party/opentelemetry
	url = https://gitee.com/EBServerStudy/opentelemetry-proto.git
[submodule "third_party/protobuf"]
	path = third_party/protobuf
	url = https://gitee.com/EBServerStudy/protobuf.git
[submodule "third_party/protoc-gen-validate"]
	path = third_party/protoc-gen-validate
	url = https://gitee.com/arzhe/protoc-gen-validate.git
[submodule "third_party/re2"]
	path = third_party/re2
	url = https://gitee.com/GgBoy_ssz/re2.git
[submodule "third_party/xds"]
	path = third_party/xds
	url = https://gitee.com/EBServerStudy/xds.git
[submodule "third_party/zlib"]
	path = third_party/zlib
	url = https://gitee.com/RicLee/zlib.git
	# When using CMake to build, the zlib submodule ends up with a
	# generated file that makes Git consider the submodule dirty. This
	# state can be ignored for day-to-day development on gRPC.
	ignore = dirty

替换完成之后执行命令:

git submodule sync
git submodule update --init

4. 编译安装


1> 在终端中进入grpc文件夹,输入mkdir -p cmake/build​创建编译文件夹
2> 构建代码,输入cmake …/… -G "MinGW Makefiles"​生成makefile和相关文件
3> 编译代码,输入 make -j​
4> 安装grpc, 输入make install -j​默认安装到"C:\Program Files (x86)\grpc"这个目录下

以上步骤的基础在于已经安装好了cmake和mingw编译环境;这里不详细展开怎么安装;不清楚的童鞋可以参考:
https://blog.csdn.net/qq_37434641/article/details/127561281

我这里实际上已经安装了qt环境,qt环境下自带了mingw编译环境,不需要安装w64devkit;但是编译命令需要更换成mingw32-make -j && mingw32-make install -j;包括命令找不到的话需要配置环境变量,熟悉linux编译的应该都知道这些,这里不展开,自行百度

[ps]如果熟悉qt creator的童鞋觉得这种命令行编译的方式太繁琐,可以使用qt creator设置好构建套件,然后打开make install开关,可以直接编译cmakelist.txt进行编译;如图:
在这里插入图片描述

5. 编译输出


正常编译完成会在C:\Program Files (x86)\grpc目录下生成如下内容:
在这里插入图片描述

6. 运行示例


切换到源代码E:\grpc\grpc\examples\cpp\helloworld目录,修改cmakelist.txt文件
在这里插入图片描述
修改完成后执行以下命令:

mkdir -p cmake/build
cd cmake/build
cmake ../.. -DCMAKE_PREFIX_PATH="C:/Program Files (x86)/grpc/" -G "MinGW Makefiles"
make -j

不报错的情况下会生成服务端的greeter_server.exe和greeter_client.exe执行文件;命令行分别执行可以看到对应的打印

7. 使用.proto文件


接下来定义一个简单的.proto文件,生成客户端服务端代码,写个简单的客户端服务端程序看通信是否正常;

syntax = "proto3";
 
package helloworld;
 
// 定义服务
service Greeter {
  // 定义rpc方法
  rpc SayHello(HelloRequest) returns (HelloReply) {}
}
 
// 消息定义
message Hell
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperYang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值