Qt6.8 GRPC功能使用(2)标准 Qt实现客户端

简介

基于之前的文章所说, Qt6.7之后才开始支持客户端、服务端、及双向流,恰好电脑需要重装,看到Qt6.8版本就直接安装了,内容也是使用Qt6.8的版本进行编译的

客户端实现步骤

1. 安装Qt6.8, 包含GRPC功能模块

Qt 6.8安装目录下包含这两个组件就可以将.proto生成Qt库支持了

在这里插入图片描述

2. 基于上一篇的示例,生成Qt支持

基于 Qt6.8 GRPC功能使用(1)标准GRPC C++ exmple编译环境搭建
新建一个Qt grpc客户端应用, 将 helloworld.proto 拷贝到该应用中,.pro加上grpc支持 .pro += grpc

proto文件

.proto文件内容, 来自xxx\grpc-1.55.0\examples\protos\helloworld.proto

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 greetingrpc SayHello (HelloRequest) returns (HelloReply) {}rpc SayHelloStreamReply (HelloRequest) returns (stream 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;
}
生成 Proto buffer的Qt支持

D:\Softwares\Paths\msys64\mingw64\bin\protoc.exe --plugin=protoc-gen-qtprotobuf=D:\Softwares\IDEs\Qt\6.8.0\mingw_64\bin\qtprotobufgen.exe -I E:/Workspace/Qt/greeter_client_qt/grpc --qtprotobuf_out=“E:/Workspace/Qt/greeter_client_qt/grpc” “E:/Workspace/Qt/greeter_client_qt/grpc/helloworld.proto”

生成 GRPC 的Qt支持

D:\Softwares\Paths\msys64\mingw64\bin\protoc.exe --plugin=protoc-gen-qtgrpc=D:\Softwares\IDEs\Qt\6.8.0\mingw_64\bin\qtgrpcgen.exe -I E:/Workspace/Qt/greeter_client_qt/grpc --qtgrpc_out=“E:/Workspace/Qt/greeter_client_qt/grpc” “E:/Workspace/Qt/greeter_client_qt/grpc/helloworld.proto”

在这里插入图片描述

3. 增加client代码

#include <QCoreApplication>
#include <QGrpcChannelOptions>
#include <QGrpcServerStream>
#include "helloworld_client.grpc.qpb.h"
#include <QGrpcHttp2Channel>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);helloworld::Greeter::Client client;QAbstractSocket::connect(&client, &QAbstractGrpcClient::errorOccurred, [=](const QGrpcStatus &status){qDebug().noquote() << "errorOccurred : " << status.code() << status.message();});QAbstractSocket::connect(&client, &QAbstractGrpcClient::channelChanged, [=](){qDebug().noquote() << "channelChanged!";});QUrl url ("http://localhost:50051");QGrpcChannelOptions channelOptions(url);std::shared_ptr<QAbstractGrpcChannel> channel = std::make_shared<QGrpcHttp2Channel>(channelOptions);client.attachChannel(channel);helloworld::HelloRequest req;req.setName("GrayHsu");std::shared_ptr<QGrpcCallReply> grpcReply = client.SayHello(req);QAbstractSocket::connect(grpcReply.get(), &QGrpcCallReply::errorOccurred, [=](const QGrpcStatus &status){qDebug().noquote() << "sayHello errorOccurred : " << status.code() << status.message();});QAbstractSocket::connect(grpcReply.get(), &QGrpcCallReply::finished, [=](){helloworld::HelloReply rep;grpcReply->read(&rep);qDebug().noquote() << "finished: " << rep.message();});return a.exec();
}

执行结果:
Server 没开
在这里插入图片描述
Server开了
在这里插入图片描述

4. Qt库简单说明

QGrpcCallReply用于接收返回信息, 提供了两个信号, 用于监控是否出错及是否结束(流时则为关闭)
std::shared_ptr grpcReply = client.SayHello(req);
在这里插入图片描述

Note

.proto 文件生成protobuffer和支持grpc语言文件支持指令

例如:

如下指令直接生成grpc_out的grpc支持,-cpp_out输出protobuffer支持D:\Softwares\Paths\msys64\mingw64\bin\protoc.exe --grpc_out E:/test/grpc-1.55.0/examples/cpp/helloworld/cmake/build --cpp_out E:/test/grpc-1.55.0/examples/cpp/helloworld/cmake/build -I E:/test/grpc-1.55.0/examples/protos --plugin=protoc-gen-grpc="D:/Softwares/Paths/msys64/mingw64/bin/grpc_cpp_plugin.exe" E:/test/grpc-1.55.0/examples/protos/helloworld.proto

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

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

相关文章

G1016倍数

题目描述 输入N个整数x1,x2,x3,...,xn&#xff0c;求100000以内有多少个数能被x1,x2,...,xn其中至少一个数整除。 输入格式 第一行1个正整数&#xff1a;N&#xff0c;范围在[1,30]。 第二行N个正整数&#xff1a;x1,x2,...,xn&#xff0c;每个数范围在[1,1000]。 输出格式…

PostgreSQL开发与实战(3)参数整理

作者&#xff1a;太阳 引言 在管理和配置PostgreSQL数据库时&#xff0c;了解参数的分类和了解如何查看和更改这些参数是至关重要的。参数的分类涉及到不同的生效方式&#xff0c;如内部参数、需要重启生效的参数、不需要重启而可以重新加载配置文件生效的参数等。本文将介绍…

5G网络介绍

目录 一、网络部署模式 二、4/5G基站网元对标 三、4/5G系统架构对比 四、5G核心单元 五、边缘计算 六、轻量化&#xff08;UPF下沉&#xff09; 方案一&#xff1a;UPF下沉 方案二&#xff1a;UPF下沉 方案三&#xff1a;5GC下沉基础模式 方案四&#xff1a;…

05 动力云客之分页查询用户 + 查询用户详情 + 新增用户

1. 用户列表分页查询实现 核心 使用pageHelper实现分页 GetMapping(value "api/users")//分页的参数可以不传, 不传就默认设置为1public R userPage(RequestParam(value "current", required false) Integer current) {if (current null) {current …

docker下gitlab安装配置

一、安装及配置 1.gitlab镜像拉取 docker pull gitlab/gitlab-ce:latest2.运行gitlab镜像 docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always --privilegedtrue -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v …

数据库 -neo4j的基本操作

启动&#xff1a; 终端输入:neo4j.bat console 查&#xff1a; 1.查询所有&#xff1a;MATCH (n) RETURN n 2.查询所有标签中&#xff0c;出生于1997的&#xff1a;Match(n{born:1997}) return n 删&#xff1a; 1.删除所有&#xff1a;MATCH (n) DETACH DELETE n 增&am…

【蓝桥备赛】蜗牛——动态规划

题目链接 蜗牛 个人思路 在每根竹竿都求出到达其底部和到达当前竹竿传送门入口的最小耗时&#xff0c;依次递推&#xff0c;求出最后一根竹竿底部的耗时。 参考代码 C 由于此处需要格式化输出小数点后两位&#xff0c;所以采用printf感觉更方便一些。 #include<bits/…

关于在Ubuntu20.04环境下安装GRPC

关于在Ubuntu20.04环境下安装GRPC 1 cmake安装 要在Ubuntu 20.04上安装CMake 3.26.4,请按照以下步骤进行操作: 打开终端并更新apt软件包列表: sudo apt update安装必要的依赖项: sudo apt install -y wget gcc g++ build-essential下载CMake 3.26.4的源代码: wget https…

12 Redis之Lua脚本

11. Lua脚本 Lua 是一个由标准 C 语言开发的、开源的、可扩展的、轻量级的、弱类型的、解释型脚本语言 常用于Nginx/分布式锁/ 先下载并安装Lua

table展示子级踩坑

##elemenui中table通过row中是否有children进行判断是否展示子集&#xff0c;通过设置tree-prop的属性进行设置&#xff0c;子级的children的名字可以根据自己的子级名字进行替换&#xff0c;当然同样可以对数据处理成含有chilren的子级list。 问题&#xff1a; 1.如果是根据后…

c++中使用lambda表达式的作用和用法

lambda表达式&#xff1a; 这是C11引入的一种新特性&#xff0c;它可以让您在需要定义函数对象的地方&#xff0c;直接编写一个匿名的、可以捕获上下文变量的函数体&#xff0c;非常适合用作回调函数、临时计算或定义小型函数对象。 lambda表达式与普通函数类似&#xff0c;也有…

存内计算技术大幅提升机器学习算法的性能—挑战与解决方案探讨

一.存内计算技术大幅机器学习算法的性能 1.1背景 人工智能技术的迅速发展使人工智能芯片成为备受关注的关键组成部分。在人工智能的构建中&#xff0c;算力是三个支柱之一&#xff0c;包括数据、算法和算力。目前&#xff0c;人工智能芯片的发展主要集中在两个方向&#xff1…

云计算新宠:探索Apache Doris的云原生策略

文章目录 Apache Doris 特性极简架构高效自运维高并发场景支持MPP 执行引擎明细与聚合模型的统一便捷数据接入 Apache Doris 极速 1.0 时代极速列式内存布局向量化的计算框架Cache 亲和度虚函数调用SIMD 指令集 稳定多源 关于 Apache Doris 开源社区基于云原生向量数据库Milvus…

Flink SQL 使用UDF函数实现将多行值转为数组

1、背景 在使用Flink SQL同步数据的实际场景中&#xff0c;会碰到需要将多行数据转为数组的情况。 以MySQL同步ES为例&#xff0c;假如我们需要把每个学生的选修课程用数组格式存到ES。 namecourse苏苏语文苏苏数学苏苏英语橙橙政治橙橙物理橙橙计算机 需要得到以下结果&…

腾讯云服务器宝塔面板中Docker应用无法访问

今天在用宝塔面板的时候用Docker一键部署Jenkins 发现部署好了端口也都开放了&#xff0c;防火墙也都开放了&#xff0c;安全组也都开放了。但是就是访问不了。 解决办法&#xff0c;在服务器终端执行下面指令 echo net.ipv4.ip_forward 1 >> /etc/sysctl.conf &…

【LeetCode-300】最长递增子序列(动归)

目录 题目描述 解法1&#xff1a;动态规划 代码实现 题目链接 题目描述 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例…

vmware 中虚拟机Ubuntu磁盘不够,扩展磁盘,并分配

vmware 中虚拟机Ubuntu磁盘不够&#xff0c;扩展磁盘&#xff0c;并分配 Ubuntu虚拟机处于关机状态。虚拟机 -> 设置 ->硬盘 ->扩展 &#xff0c;可以直接多给点&#xff0c;这里只是做演示。 3.开启虚拟机&#xff0c;一般不会报错&#xff0c;我这里报错了&#…

Base 链官方点名 $AYB,继续飙涨指日可待?

近期 $AYB&#xff08;All Your Base Are Belong To Us&#xff09; 成为了 BASE 链上最火的 meme 项目&#xff0c;据悉 $AYB 在去年年底上线至今涨幅已经超过了 100 倍&#xff0c;其在被各大加密社区、KOL 追捧的同时&#xff0c;也被公认是继 Solana 上的 $BONK、Avalanche…

【Leetcode每日一题】二分查找 - 寻找旋转排序数组中的最小值(难度⭐⭐)(22)

1. 题目解析 Leetcode链接&#xff1a;153. 寻找旋转排序数组中的最小值 这个题目乍一看很长很复杂&#xff0c;又是旋转数组又是最小值的 但是仔细想想&#xff0c;结合题目给的示例&#xff0c;不难看出可以用二分的方法来解决 核心在于找到给定数组里面的最小值 2. 算法原…

一文了解游戏从立项到发行的流程

背景 玩家从app商店下载一个游戏,看到了只是一个游戏客户端。那么,游戏从立项到用户下载,会经过哪些职能部门呢? 游戏项目经过的部门可以因公司和项目的规模而有所不同,但通常会涉及以下部门: 游戏相关部门 项目经理/制作人:研发团队核心角色,负责协调和管理游戏项目…