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

news2024/9/22 3:47:01

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编译的应该都知道这些,这里不展开,自行百度

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/" 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2117743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Springboot课堂评测系统的设计与实现---附源码82642

目 录 摘要 Abstract 1 绪论 1.1 研究背景与意义 1.2 开发技术和开发特点 1.3论文结构与章节安排 2 课堂评测系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.…

MyBatis-pulsdruid数据源

MyBatis-Plus 是 MyBatis 的增强工具,主要用于简化数据库操作和提升开发效率。Druid 是阿里巴巴开源的数据库连接池组件,提供了高效的数据库连接管理和监控功能。将这两者结合使用可以更好地管理和操作数据库。以下是 MyBatis-Plus 和 Druid 数据源的总结…

数据重删技术

目录 一、名词介绍 二、重删概述 三、重删分类 四、源端重删 一、名词介绍 指纹:不同数据块数据通过哈希算法所生成的唯一标识。 重删率:(1 - 实际备份数据量 / 已完成数据量)* 100%。 重删卷:存放指纹库的物理卷。…

JAVA一键开启缘分之旅红娘相亲交友系统小程序源码

一键开启缘分之旅 —— 红娘相亲交友系统 💖 初遇心动,一键启程 在这个快节奏的时代,找到那个对的人似乎成了一种奢侈。但别担心,有了“红娘相亲交友系统”,你的缘分之旅只需一键即可开启!无需复杂的注册流…

【网页播放器】播放自己喜欢的音乐

// 错误处理 window.onerror function(message, source, lineno, colno, error) {console.error("An error occurred:", message, "at", source, ":", lineno);return true; };// 检查 particlesJS 是否已定义 if (typeof particlesJS ! undefi…

【Day10-配置文件日志多线程】

配置文件 介绍 配置文件 在企业开发过程中,我们习惯把一些需要灵活配置的数据放在一些文本文件中,而不是在Java代码写死我们把这种存放程序配置信息的文件,统称为配置文件 Properties 是一个Map集合(键值对集合)&am…

推荐系统的基础_协同过滤(CF)

协同过滤(Collaborative Filtering)是一种推荐系统算法,它通过分析用户之间的相似性或者物品之间的相似性来预测用户可能感兴趣的物品。协同过滤算法主要有两种类型: 1. 用户基协同过滤(User-based Collaborative Filt…

OceanMind海睿思“一种业务驱动数据治理的方法和系统”获国家发明专利!

近日,中新赛克海睿思最新技术:一种业务驱动数据治理的方法和系统(专利号ZL 202410567107.8),获得国家知识产权局的正式授权,并取得专利证书。 当前,现有的数据治理方法论和平台工具主要聚焦于数…

IDEA 常用插件推荐,美观又实用!

1、 TONGYl Lingma - Your Al Coding Assistant. Type less, Code more. 通义灵码,是一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&…

JVM 调优篇2 jvm的内存结构以及堆栈参数设置与查看

一 jvm的内存模型 2.1 jvm内存模型概览 二 实操案例 2.1 设置和查看栈大小 1.代码 /*** 演示栈中的异常:StackOverflowError** author shkstart* create 2020 下午 9:08** 设置栈的大小: -Xss (-XX:ThreadStackSize)** -XX:PrintFlagsFinal*/ public class S…

【C++】C++ STL 探索:List使用与背后底层逻辑

C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现 本文将通过模拟实现List,从多个角度深入…

第J3周:DenseNet算法实战与解析(pytorch版)

>- **🍨 本文为[🔗365天深度学习训练营]中的学习记录博客** >- **🍖 原作者:[K同学啊]** 📌 本周任务: ●1.请根据本文 Pytorch 代码,编写出相应的 TensorFlow 代码(建议使用…

《黑神话·悟空》背后的佛学义理探析

《黑神话悟空》不仅是一款备受期待的动作冒险游戏,其背后的深厚文化内涵,尤其是佛教义理的体现,更是吸引了不少玩家和佛学爱好者的关注。本文将通过对游戏剧情的解析,结合佛教思想,探讨《黑神话悟空》中所蕴含的哲学智…

冯·诺依曼体系结构

纯硬件的计算机结构应该就是输入设备——CPU——输出设备 冯诺依曼体系结构加入了存储器(内存) 因为数据是要在计算机体系结构中流动的,流动过程中对数据进行加工处理,数据从一个设备到另流动到另一个设备本质是一种数据拷贝。C…

HDFS常用命令及Python连接HDFS操作

目录 一、HDFS常用命令 二、Python连接HDFS操作 一、HDFS常用命令 HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)是Hadoop集群中的一部分,用于存储大量数据,并运行在商用硬件集群上。以下是HDFS中常用…

6款好用到离谱的宝藏软件,每一款都超出你的认知

你的电脑里有没有那种,无论重装多少次系统,都要第一时间安装的软件? 请把它的名字打在评论区!本期分享6款,免费也能吊打付费的Windows电脑必装软件。 最大程度的增强Windows系统的功能,良心分享&#xff…

一文讲解多种GIS分析功能

GIS行业有很多分析功能,对于刚入行的新手有着足够的吸引力,其实有许多分析功能实现原理大差不差,比如模型压平,基于模型的淹没分析以及模型裁切。本文将以模型裁切为切入口进行介绍其中原理。 首先 (立方体剖切示意图…

只需一个类文件,Erupt 可以能完成整个后台管理?这个低代码值得一试

只需一个类文件,Erupt 竟然能搞定整个后台管理?这个低代码值得一试 在纷繁复杂的后端开发世界里,Erupt 就像是一剂强心针,用一个 .class 文件就能实现后台管理功能,简直让人感叹“开发也可以这么简单!”本文…

linux进程的概念和pid

进程的概念 进程是参与分配资源(cpu,内存)得实体,比如打开qq,浏览器就是打开了进程。 进程这么多,如何管理进程呢? 在linux下进程通过PCB(task_struct)来管理进程 ta…

足浴行业在线预约小程序源码系统+支持拼团功能 带完整的安装代码包以及搭建部署教程

系统概述 在快节奏的现代生活中,人们对健康养生的需求日益增长,足浴行业作为传统养生方式之一,其市场需求也随之不断扩大。为了满足消费者日益增长的便捷性需求,一款集在线预约、拼团优惠于一体的足浴行业小程序源码系统应运而生…