Qt Remote Object(QtRO)给指定的客户端发送消息
概述
前面写了两篇文章介绍QtRO的使用方法,在这里:
Qt Remote Object(QtRO)实现进程间通信
Qt Remote Object(QtRO)动态Replica实现进程间通信
然后会带来一个疑问,如果有多个客户端,每个客户端可以单独发消息给服务端,服务端发消息,所有客户端都能接收到,那如果说服务端只想给其中某一个客户端发消息怎么办呢。
效果图
上述演示可以看到,中间是server端,左边是Client A,右边是Client B,两个客户端可以单独给Server端发送消息,而Server端也可以选择给那个Client端发送消息。
实现方式
QtRO我的使用场景一般是:一个主进程,很多功能模块独立出来行程了子进程exe,然后每个子进程和主进程之间进行通信,那么这里有个前提就是,已经知道有哪些子进程了,接下来如果主进程想给指定的子进程发送消息,这里有一种比较取巧的方法,直接给对应的子进程定义一个特有的信号。
前面的文章我们已经介绍,实现QtRO一个非常关键的步骤,定义Rep文件,在Rep文件中已经写好了要共享的信号、槽、属性等,那么我们只需要在之前的基础上,添加新的信号对应每个客户端进程,然后客户端单独连接该信号,服务端就可以根据不同的信号来发送给相应的客户端啦,原理非常简单。
ok,直接在以前的代码上修改。
首先修改rep文件
class CommonInterface
{SIGNAL(sigMessageToA(QString msg)) //server下发消息给clientSIGNAL(sigMessageToB(QString msg)) //server下发消息给clientSLOT(void onMessage(QString msg)) //server接收client的消息
}
这里对信号做了修改,每个客户端对应一个信号。
然后server端新增加接口,单独发送不同信号:
/*** @brief CommonInterface::sendMsg* @param msg* 发送消息给客户端 B*/
void CommonInterface::sendMsgToB(const QString &msg)
{emit sigMessageToB(msg);
}/*** @brief CommonInterface::sendMsg* @param msg* 发送消息给客户端 A*/
void CommonInterface::sendMsgToA(const QString &msg)
{emit sigMessageToA(msg);
}
ok,接下来server端只需要掉用不同的接口就可以了。
而Client端更简单,只需要连接自己对应的信号即可,比如:
connect(m_pInterface,&CommonInterfaceReplica::sigMessageToA,this,&MainWidget::onReceiveMsg);
只需要做这一小点改变即可,其他代码大同小异,只要原理清楚了就好办,就不全部列出来了。
后记
其实最好的方式是 当Client端连接上Server后能够识别到,然后Server端能够选择性的发送给每个Client端,这样会更加灵活一些,不过这只是一种猜想的思路, 目前还没得到验证, 待后期多熟悉下Qt相关文档后再做进一步研究。目前上述这种方式能够满足我需要的应用场景。
Qt Remote Object(QtRO)给指定的客户端发送消息相关推荐
- Qt Remote Object(QtRO)实现进程间通信
概述 Qt Remote Object简称QtRO,这是Qt5.9以后官方推出来的新模块,专门用于进程间通信(IPC).在这之前,要实现进程间通信有多种方式,这里就不做介绍了,而Qt官方推出的这个新模 ...
- Socket服务端向指定客户端发送消息
Socket服务端向指定客户端发送消息 解决思想 1.项目背景 2.如何上传与下发指令 3.解决方法 4.流程 解决思想 I.指定客户端远程地址是存起来的. II.服务端直接主动发信息给客户端,问题在 ...
- 服务器怎么向指定客户端发送信息,WebSocket 如何实现服务端向客户端发送消息?...
我们都知道, Websocket 是一个双向的通讯方式,一般情况下,我们都是根据 Client 的情况返回信息,但是在一个更加健壮的系统,我们可能需要主动的向客户端发送消息.我试图在中文网络去搜索,查 ...
- Nerry实现服务器端指定客户端发送消息。
目录 pom依赖 Server端 main方法初始化netty 服务端端主动给客户端发送消息 pom依赖 <dependency><groupId>io.netty</g ...
- ssm配置socket_ssm框架中集成websocket实现服务端主动向客户端发送消息
找了很多配置文档及实例说明,也还是没能成功,最终在csdn博客中发现了基于stomp的消息推送的文章, 下面整理自csdn博客,https://blog.csdn.net/u013627689/art ...
- python微信定时发消息_python实现给微信指定好友定时发送消息
微信如何在设定时间自动发送信息给指定好友 微信没有定时发送信息的功能,但是可以借助小程序. 世界上最遥远的距离,不是生与死,而是小编就站在你面前,你却不知道小编爱你. 打开微信之后在搜索小程序中输入蜗 ...
- 简单的nodejs+socket.io给指定的人发送消息
最近学习了一下socket.io,不太会用,所以做了一个小demo理一下思路. 主要目的是实现向某个指定的用户发送消息,也就是服务端单独推送信息给某个人.具体的思路就是每个在线的用户都对应一个sock ...
- 【源码篇】Kafka客户端发送消息
在上一篇文章中,已经介绍了初始化 KafkaProducer 基本流程.当客户端对 KafkaProducer 完成完成后,可以调用 send() 方法将数据发送至kafka broker集群. 图中 ...
- python企业微信回调_python 微信企业号-回调模式接收微信端客户端发送消息并被动返回消息...
说明:此代码用于接收手机微信端发送的消息 #-*- coding:utf-8 -*- from flask import Flask,request from WXBizMsgCrypt import ...
最新文章
- JDK9为何要将String的底层实现由char[]改成了byte[]?
- Markdown通用的常用语法说明
- android使用HttpURLConnection/HttpClient实现带参数文件上传
- Ms SQL Server 约束和规则
- 不满足于汽车制造,丰田展示仿钢铁侠机器支撑腿架
- (王道408考研数据结构)第一章绪论-第一节:数据结构的基本概念、三要素、逻辑结构和物理结构
- redis分表_《面试官系列:深入数据库分区分库分表》
- java最好性能手机_企业级Java应用最重要的4个性能指标
- 浅谈如何使用Redis实现分布式锁
- CherryTree:一款免费开源的富文本笔记软件
- 小功能_mianBao_电影
- 聪哥哥有话说之说说《短歌行》
- 台式机切换有线/无线网脚本
- 大数据商机VS个人隐私 车联网的攻与守
- TR-069协议简介
- 无法运行rc.exe(已解决)
- UI设计和平面设计的区别
- 计算机英语中poke什么意思,poke是什么意思_poke在线翻译_英语_读音_用法_例句_海词词典...
- 针对Vmware打开BIOS中VT虚拟化相关后仍然报错
- 实锤!长沙智博美术培训学校