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

server/2024/10/11 2:38:35/

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

grpc_26">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-cppurl = https://gitee.com/suuair/abseil-cpp.git
[submodule "third_party/benchmark"]path = third_party/benchmarkurl = https://gitee.com/chahan/benchmark.git
[submodule "third_party/bloaty"]path = third_party/bloatyurl = https://gitee.com/GgBoy_ssz/bloaty.git
[submodule "third_party/boringssl-with-bazel"]path = third_party/boringssl-with-bazelurl = https://gitee.com/GgBoy_ssz/boringssl.git
[submodule "third_party/cares/cares"]path = third_party/cares/caresurl = https://gitee.com/RicLee/c-ares.git
[submodule "third_party/envoy-api"]path = third_party/envoy-apiurl = https://gitee.com/RicLee/data-plane-api.git
[submodule "third_party/googleapis"]path = third_party/googleapisurl = https://gitee.com/GgBoy_ssz/googleapis.git
[submodule "third_party/googletest"]path = third_party/googletesturl = https://gitee.com/bosspoi/googletest.git
[submodule "third_party/libuv"]path = third_party/libuvurl = https://gitee.com/RicLee/libuv.git
[submodule "third_party/opencensus-proto"]path = third_party/opencensus-protourl = https://gitee.com/RicLee/opencensus-proto.git
[submodule "third_party/opentelemetry"]path = third_party/opentelemetryurl = https://gitee.com/EBServerStudy/opentelemetry-proto.git
[submodule "third_party/protobuf"]path = third_party/protobufurl = https://gitee.com/EBServerStudy/protobuf.git
[submodule "third_party/protoc-gen-validate"]path = third_party/protoc-gen-validateurl = https://gitee.com/arzhe/protoc-gen-validate.git
[submodule "third_party/re2"]path = third_party/re2url = https://gitee.com/GgBoy_ssz/re2.git
[submodule "third_party/xds"]path = third_party/xdsurl = https://gitee.com/EBServerStudy/xds.git
[submodule "third_party/zlib"]path = third_party/zliburl = 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 ../.. 

http://www.ppmy.cn/server/114717.html

相关文章

简单记录一下,工厂模式(Factory Pattern)与策略模式(Strategy Pattern)的区别

工厂模式(Factory Pattern)与策略模式(Strategy Pattern)的区别 1. 工厂模式(Factory Pattern) **定义:**工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模…

如何划分类/单一职权原则SRP

参考:单一职责 -- 每个类只负责一个功能_每个类应该只负责一个功能,遵循单一职责原则。-CSDN博客 类有且只有一个原因需要修改它,这样的才是一个结构简洁的类。 结合上面的例子,需要注意的点: 1.比如搜索数据库,需要…

享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享大量细粒度对象来减少内存消耗。享元模式的核心思想是将多个相似的对象共享起来,从而避免对象的大量创建,节省内存资源。 场景说明 假设你正在开发一个绘…

electron 客户端 windows linux(麒麟V10)多系统离线打包 最新版 <二>

这节主要讲解以下 linux系统(国产麒麟)下,electron如何配置打包。 第一, 下载二进制包 和windows的一样,还是下载二进制包。只不过是linux版本的,千万不要下错了。 地址:CNPM Binaries Mirro…

注册安全分析报告:熊猫频道

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

大模型训练框架LLaMAFactory覆盖预训练指令微调强化学习评估全流程

1. 项目背景 开源大模型如LLaMA,Qwen,Baichuan等主要都是使用通用数据进行训练而来,其对于不同下游的使用场景和垂直领域的效果有待进一步提升,衍生出了微调训练相关的需求,包含预训练(pt)&…

梨花声音研修院退费普通话学习对国际交流的影响

随着中国在国际舞台上的影响力不断增强,普通话在国际交流中的作用日益显著。普通话不仅是中国的国家通用语言,也是全球范围内越来越重要的一种交流工具。通过学习普通话,不仅可以促进国际合作、增强留学和旅游体验,还能拓展全球就…

三菱机器人手柄维修示教器维修手操器面板等

机器人手柄维修(示教器维修)故障现象包括:黑屏、指示灯无任何显示, 上电蓝屏、白屏,通电几分钟后屏幕变为蓝屏,主板故障,通讯时有时无, 触摸失灵,有时白屏,触…