概述

前面写了两篇文章介绍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)给指定的客户端发送消息相关推荐

  1. Qt Remote Object(QtRO)实现进程间通信

    概述 Qt Remote Object简称QtRO,这是Qt5.9以后官方推出来的新模块,专门用于进程间通信(IPC).在这之前,要实现进程间通信有多种方式,这里就不做介绍了,而Qt官方推出的这个新模 ...

  2. Socket服务端向指定客户端发送消息

    Socket服务端向指定客户端发送消息 解决思想 1.项目背景 2.如何上传与下发指令 3.解决方法 4.流程 解决思想 I.指定客户端远程地址是存起来的. II.服务端直接主动发信息给客户端,问题在 ...

  3. 服务器怎么向指定客户端发送信息,WebSocket 如何实现服务端向客户端发送消息?...

    我们都知道, Websocket 是一个双向的通讯方式,一般情况下,我们都是根据 Client 的情况返回信息,但是在一个更加健壮的系统,我们可能需要主动的向客户端发送消息.我试图在中文网络去搜索,查 ...

  4. Nerry实现服务器端指定客户端发送消息。

    目录 pom依赖 Server端 main方法初始化netty 服务端端主动给客户端发送消息 pom依赖 <dependency><groupId>io.netty</g ...

  5. ssm配置socket_ssm框架中集成websocket实现服务端主动向客户端发送消息

    找了很多配置文档及实例说明,也还是没能成功,最终在csdn博客中发现了基于stomp的消息推送的文章, 下面整理自csdn博客,https://blog.csdn.net/u013627689/art ...

  6. python微信定时发消息_python实现给微信指定好友定时发送消息

    微信如何在设定时间自动发送信息给指定好友 微信没有定时发送信息的功能,但是可以借助小程序. 世界上最遥远的距离,不是生与死,而是小编就站在你面前,你却不知道小编爱你. 打开微信之后在搜索小程序中输入蜗 ...

  7. 简单的nodejs+socket.io给指定的人发送消息

    最近学习了一下socket.io,不太会用,所以做了一个小demo理一下思路. 主要目的是实现向某个指定的用户发送消息,也就是服务端单独推送信息给某个人.具体的思路就是每个在线的用户都对应一个sock ...

  8. 【源码篇】Kafka客户端发送消息

    在上一篇文章中,已经介绍了初始化 KafkaProducer 基本流程.当客户端对 KafkaProducer 完成完成后,可以调用 send() 方法将数据发送至kafka broker集群. 图中 ...

  9. python企业微信回调_python 微信企业号-回调模式接收微信端客户端发送消息并被动返回消息...

    说明:此代码用于接收手机微信端发送的消息 #-*- coding:utf-8 -*- from flask import Flask,request from WXBizMsgCrypt import ...

最新文章

  1. JDK9为何要将String的底层实现由char[]改成了byte[]?
  2. Markdown通用的常用语法说明
  3. android使用HttpURLConnection/HttpClient实现带参数文件上传
  4. Ms SQL Server 约束和规则
  5. 不满足于汽车制造,丰田展示仿钢铁侠机器支撑腿架
  6. (王道408考研数据结构)第一章绪论-第一节:数据结构的基本概念、三要素、逻辑结构和物理结构
  7. redis分表_《面试官系列:深入数据库分区分库分表》
  8. java最好性能手机_企业级Java应用最重要的4个性能指标
  9. 浅谈如何使用Redis实现分布式锁
  10. CherryTree:一款免费开源的富文本笔记软件
  11. 小功能_mianBao_电影
  12. 聪哥哥有话说之说说《短歌行》
  13. 台式机切换有线/无线网脚本
  14. 大数据商机VS个人隐私 车联网的攻与守
  15. TR-069协议简介
  16. 无法运行rc.exe(已解决)
  17. UI设计和平面设计的区别
  18. 计算机英语中poke什么意思,poke是什么意思_poke在线翻译_英语_读音_用法_例句_海词词典...
  19. 针对Vmware打开BIOS中VT虚拟化相关后仍然报错
  20. 实锤!长沙智博美术培训学校

热门文章

  1. 推荐系统中的Bias/Debias大全
  2. 推荐系统炼丹笔记:RecSys2020-SSE-PT解锁序列数据挖掘新姿势
  3. 互联网1分钟 |1026
  4. Linux-shell
  5. vue 自己写组件。
  6. 验证Node和npm是否安装成功
  7. 云计算重头戏:可信计算技术
  8. 大对象简介+大对象的4种类型+lob类型的优点+lob的组成
  9. 网路神警上网行为管理系统 v3.4.5官方版
  10. 云监控Agent指南-Linux版