一种基于QT的C/S架构消息路由方法及装置与流程

文档序号:16513518发布日期:2019-01-05 09:29阅读:432来源:国知局
一种基于QT的C/S架构消息路由方法及装置与流程

本发明涉及c/s架构消息路由领域,尤其是涉及一种基于qt的c/s架构消息路由方法及装置。



背景技术:

在c/s(即client/server结构,是客户机和服务器结构)架构中,在客户端的各个模块发出数据请求,其中数据传递均以json(即javascriptobjectnotation,是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成)格式传递,这些请求都会汇集到客户端的消息中心,由消息中心调用通信接口发送数据到服务端;服务端收到数据请求后,应答客户端,向客户端返回应答数据,这些应答数据由客户端的通信接口接收,通信接口将应答数据交给消息中心,然后由消息中心识别应答数据,判断应答数据应该发送到那个模块,最终将应答数据分发到客户端相应模块,这个过程我们称为消息路由。现有技术中,在客户端的数据请求和应答的过程中,客户端消息中心往往无法将业务模块请求数据的应答数据准确的分发到该业务模块,将导致消息中心的数据分发紊乱,从而导致客户端正常的业务功能紊乱,无法正常工作。



技术实现要素:

为了提高c/s架构下消息路由的稳定性,避免由于客户端的消息中心数据分发紊乱,导致客户端正常的业务功能紊乱,无法正常工作。本发明通过提供一种基于qt的c/s架构消息路由方法及装置,基于qt程序的信号与槽以及c++多态数据属性,将应答数据准确发送到相应的业务模块,从而保证数据收发的一一对应,提高了c/s架构下消息路由的稳定性,避免由于客户端的消息中心数据分发紊乱,导致客户端正常的业务功能紊乱,无法正常工作。

本发明第一方面提供了一种基于qt的c/s架构消息路由方法,实现客户端的消息中心调用通信接口发送请求数据到服务端,服务端做出应答后将应答数据通过通信接口交给客户端消息中心,还包括以下步骤:

将客户端的所有业务模块与消息中心通过qt的connect函数绑定;

通过setproperty设置业务模块属性,使业务模块具有唯一标识符;

业务模块通过数据请求信号函数发送请求数据,消息中心的请求数据接收槽函数响应,接收请求数据;

客户端消息中心将接收到请求数据中msgid字段的值和业务模块的唯一标识符通过map集合实现对应绑定;

客户端消息中心接收应答数据,取出应答数据的resid字段的值,将resid字段的值去全局map中匹配业务模块唯一标识符,然后将应答数据发送到相应的业务模块。

结合第一方面,在第一方面第一种可能的实现方式中,所述将客户端的所有业务模块通过qt的connect函数绑定其具体过程是:将客户端的所有业务模块的请求数据的信号函数与消息中心的业务模块请求数据接收槽函数通过qt的connect函数绑定,将客户端消息中心应答业务模块的信号函数和客户端业务模块的应答数据接收槽函数通过qt的connect函数绑定。

结合第一方面,在第一方面第二种可能的实现方式中,所述通过setproperty设置的业务模块属性中,每个业务模块类拥有共同的父类,继承于qobject,通过setproperty方法设置,其具体是:每个业务模块类都继承于qobject(qobject类是所以qt类的基类,也是qt对象模型的核心,这个模型中的核心特性就是能让对象键无缝通信的信号和槽的机制),拥有共同的父类,qobject拥有setproperty方法,通过setproperty方法设置模块属性,使业务模块具有唯一标识符。

结合第一方面,在第一方面第三种可能的实现方式中,所述客户端消息中心将接收到请求数据中msgid字段的值和业务模块的唯一标识符通过map集合实现对应绑定,具体是:通过调用qobject类型的业务模块的对象指针的property函数(property函数用来在新式类中返回属性值),获得业务模块唯一标识符,并将请求数据中msgid字段的值和业务模块的唯一标识符通过map集合实现一一对应绑定。

结合第一方面,在第一方面第四种可能的实现方式中,所述qobject类型的业务模块的对象指针是通过sender()函数(返回发送信号的对象的指针,返回类型为qobject)获取到发送数据的业务模块对象指针,然后将该对象指针转换为qobject类型的对象指针。

结合第一方面,在第一方面第五种可能的实现方式中,所述请求数据中msgid字段的值和业务模块的唯一标识符通过map集合实现对应绑定,具体为:将接收到的请求数据的msgid字段的值作为全局map的key(关键值),将获得的业务模块的唯一标识符作为全局map的value(影射值),通过map集合实现一一对应绑定。

结合第一方面,在第一方面第六种可能的实现方式中,所述客户端消息中心在全局map中匹配业务模块唯一标识符过程中,匹配依据是请求数据的msgid字段的值和应答数据的resid的值相同。

结合第一方面,在第一方面第七种可能的实现方式中,所述消息路由过程中数据传递均以json格式传递。

本发明第二方面提供了一种基于qt的c/s架构消息路由的装置,实现客户端的消息中心调用通信接口发送请求数据到服务端,服务端做出应答后将应答数据通过通信接口交给客户端消息中心,还包括:

第一绑定模块,将客户端的所有业务模块与消息中心通过qt的connect函数绑定;

标识符设置模块,通过setproperty设置业务模块属性,使业务模块具有唯一标识符;

请求数据发送模块,业务模块通过数据请求信号函数发送请求数据,消息中心的请求数据接收槽函数响应,接收请求数据;

第二绑定模块,客户端消息中心将接收到请求数据中msgid字段的值和业务模块的唯一标识符通过map集合实现对应绑定;

请求数据应答模块,客户端消息中心接收应答数据,取出应答数据的resid字段的值,将resid字段的值去全局map中匹配业务模块唯一标识符,然后将应答数据发送到相应的业务模块。

本发明采用的技术方案包括以下技术效果:

本发明通过提供一种基于qt的c/s架构消息路由方法及装置,通过预先将所有业务模块与消息中心通过qt的connect函数绑定,通过setproperty方法设置业务模块属性,使业务模块具有唯一的标识符,客户端的消息中心将请求数据的msgid字段的值和相应业务模块的唯一标识符通过map集合实现对应绑定对应绑定,客户端消息中心取出应答数据的resid字段的值,将resid字段的值去全局map中匹配业务模块唯一标识,将应答数据发送到相应的业务模块,从而保证数据收发的一一对应,本发明还提供了一种基于qt的c/s架构消息路由的装置,提高了c/s架构下消息路由的稳定性,避免由于客户端的消息中心数据分发紊乱,导致客户端正常的业务功能紊乱,无法正常工作。

应当理解的是以上的一般描述以及后文的细节描述仅是示例性和解释性的,并不能限制本发明。

附图说明

为了更清楚说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍,显而易见的,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1本发明方案中方法实施例一的结构示意图;

图2本发明方案中装置实施例二的结构示意图。

具体实施方式

为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。

实施例一

如图1所示,本发明技术方案中一种基于qt的c/s架构消息路由方法,包括:

s11,将客户端的所有业务模块与消息中心通过qt的connect函数绑定。

s12,通过setproperty设置业务模块属性,使业务模块具有唯一标识符。

s13,各个业务模块的通过数据请求信号函数发送请求数据,消息中心的请求数据接收槽函数响应,接收请求数据。

s14,客户端消息中心将接收到请求数据中msgid字段的值和业务模块的唯一标识符通过map集合实现对应绑定。

s15,客户端的消息中心调用通信接口发送请求数据到服务端,服务端做出应答后将应答数据通过通信接口交给客户端消息中心。

s16,客户端消息中心接收应答数据,取出应答数据的resid字段的值,将resid字段的值去全局map中匹配业务模块唯一标识符,然后将应答数据发送到相应的业务模块。

在步骤s11中,将客户端的所有业务模块与消息中心通过qt的connect函数绑定包括:将客户端的所有业务模块的请求数据的信号函数与消息中心的请求数据接收槽函数通过qt的connect函数绑定;将客户端消息中心应答数据的信号函数和业务模块的应答数据接收槽函数通过qt的connect函数绑定。

在步骤s12中,通过setproperty设置的业务模块属性,使业务模块具有唯一标识符包括:每个业务模块类都继承于qobject,拥有共同的父类,qobject拥有setproperty方法,通过setproperty设置模块属性,并给业务模块属性赋值,使业务模块具有唯一标识符。

在步骤s14中,客户端消息中心将接收到请求数据中msgid字段的值和业务模块的唯一标识符通过map集合实现对应绑定包括:通过sender()函数获取到发送数据的业务模块对象指针,将这个对象指针转换为qobject类型的对象指针,通过调用qobject类型的业务模块的对象指针的property函数,设置取出业务模块唯一标识符,并将接收请求数据中msgid字段的值作为全局map的key和取出业务模块的唯一标识符作为全局map的value,通过map集合实现一一对应绑定。

在步骤s16中,将resid字段的值去全局map中匹配业务模块唯一标识符,其匹配依据是请求数据的msgid字段的值和应答数据的resid的值相同。

在方法实施例一中,消息路由过程中数据传递均以json格式传递。

如图2所示,一种基于qt的c/s架构消息路由的装置,实现客户端的消息中心调用通信接口发送请求数据到服务端,服务端做出应答后将应答数据通过通信接口交给客户端消息中心,还包括:

第一绑定模块101,将客户端的所有业务模块与消息中心通过qt的connect函数绑定;

标识符设置模块102,通过setproperty设置业务模块属性,使业务模块具有唯一标识符;

请求数据发送模块103,业务模块通过数据请求信号函数发送请求数据,消息中心的请求数据接收槽函数响应,接收请求数据;

第二绑定模块104,客户端消息中心将接收到请求数据中msgid字段的值和业务模块的唯一标识符通过map集合实现对应绑定;

请求数据应答模块105,客户端消息中心接收应答数据,取出应答数据的resid字段的值,将resid字段的值去全局map中匹配业务模块唯一标识符,然后将应答数据发送到相应的业务模块。

上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1