CN104615489B - 一种多节点数据交互的实现方法 - Google Patents
一种多节点数据交互的实现方法 Download PDFInfo
- Publication number
- CN104615489B CN104615489B CN201510034019.2A CN201510034019A CN104615489B CN 104615489 B CN104615489 B CN 104615489B CN 201510034019 A CN201510034019 A CN 201510034019A CN 104615489 B CN104615489 B CN 104615489B
- Authority
- CN
- China
- Prior art keywords
- data
- node
- client
- call
- service module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Computer And Data Communications (AREA)
- Multi Processors (AREA)
Abstract
本发明公开了一种多节点数据交互的实现方法,在每个节点上设置数据服务模块,任一节点上的数据服务模块用于实现该节点自身进程之间的数据交互,同时不同节点上的数据服务模块实现不同节点进程之间的数据交互;所述数据服务模块通过远程过程调用协议实现进程间的数据交互,所述远程过程调用协议的底层通过Qt元对象***实现。使用该方法可以使分布在同一个节点的多个进程或不同节点上的进程之间顺畅的完成业务管理,同时也可以降低传统数据交互方法程序实现的复杂程度。
Description
技术领域
本发明涉及多节点之间的业务处理,特别涉及一种节点数据交互的实现方法。
背景技术
随着计算机以及网络的高速发展,分布式处理***被大规模应用。分布式***中某个节点为了访问其他机器节点的数据与资源,一般会通过自定义报文格式的方式进行数据交互或业务处理。这种方式的通信效率非常低而且维护开发工作量较大。当增加或修改某个功能时有可能需要增加新的报文格式或对已有的报文格式进行修改,因此***中模块之间的耦合程度较高,独立性比较差。如果机器节点之间通过过程调用的方式来访问其他机器节点的数据与资源,就可以大大降低进程实现的复杂度,从而降低进程之间的耦合性,让***设计变得更加简单。从某种意义上来讲,远程过程调用可看作是把分割的程序通过网络进行重组的过程。通过远程过程调用,当要访问其他机器***上数据的时候就不需每次拷贝整个数据库或它的大部分程序到用户***,远程机器节点只需要处理来自客户端的处理请求,甚至只执行一些数据计算,把执行的结果再发送给调用者。当数据存放在某个机器节点时,其他机器节点可以很方便的通过远程过程访问其数据,因此极大提高了分布式***中计算机资源的利用率。
过程调用一般是指将控制从调用者传递到被调用者,被调用者在执行结束后将控制交还给调用者。目前大多数调用者和被调用者是在同一台机器上,它们是在生成可执行程序时由编译器链接起来的,这种过程调用一般称为本地过程调用。远程过程调用指的是由本地机器***上的某个进程激活远程机器***上的另外一个进程,远程***调用对调用者表现为本地过程调用,但实际上是调用了远程***上的过程。
处理远程过程调用的进程由本地客户端进程和其他机器节点进程共同作用。远程过程调用对于本地客户端表现为由调用进程在执行某个控制时首先将过程调用需要的参数以及需要调用的过程生成对应的消息,并通过网络发往其他机器节点其他机器节点接到消息后调用相应过程,调用结束后将执行结果通过网络发送至调用者。
传统的过程调用是由开发人员在本地编译完成,并只能运行在本地机器上,这种结构已经无法适应分布式***应用的实际需求。传统过程调用没有办法充分利用网络上其他机器节点的***资源,也没有办法提高代码在实体间的共享程度,使得分布式***机器资源没有得到充分的利用。而远程过程调用很好地解决了传统过程调用,通过远程调用可以充分利用非共享内存的多处理器环境并应用分布在多台机器节点上,应用程序就像在一个多处理器的计算机上运行一样,可以方便的实现过程代码共享,提高***资源的利用率。远程过程调用和通过定义报文传递处理消息相比,前者语义更加清楚、使用更加简单、通用性以及可扩展性更强,而且有着更高的通信效率。
当在***或节点之间采用远程过程调用(Remote Procedure Call,RPC)之后,原先节点之间的数据及操作处理由图1变成图2的模式,进程在处理其他节点或进程的数据就变得和在自己本进程内处理一样简单,程序代码更加简单,减小了***设计的复杂性。
发明内容
发明目的:针对上述现有技术,提出一种多节点数据交互的实现方法,通过远程过程调用实现数据交互,简化业务数据处理流程。
技术方案:一种多节点数据交互的实现方法,在每个节点上设置数据服务模块,任一节点上的数据服务模块用于实现该节点自身进程之间的数据交互,同时不同节点上的数据服务模块实现不同节点进程之间的数据交互;所述数据服务模块通过远程过程调用协议实现进程间的数据交互,所述远程过程调用协议的底层通过Qt元对象***实现。
进一步的,所述远程过程调用协议的底层通过Qt元对象***实现时,Qt元对象***中QObject子类的Slot函数所对应的输入参数作为过程调用的输入,Slot函数的返回值作为过程调用的输出结果。
进一步的,所述远程过程调用中,当客户端任一进程需要获得其他机器节点的变化数据的时候,不同节点之间变化数据的通知包括如下步骤:首先在客户端的数据服务模块上对所述数据或该数据对象类型进行注册;当其它机器节点的数据变化后,将变化数据发送给客户端的数据服务模块;然后由客户端的服务模块通过进程间过程调用通知所述注册数据或数据对象类型所对应的进程,在所述对应进程的进程空间内执行相应的回调函数。
进一步的,所述远程过程调用包括如下具体步骤:
e.机器节点按照功能分类,从QObject子类继承得到若干个对象,节点之间的远程过程调用通过所述若干个对象所对应的Slot函数实现,并将所述QObject子类实例化为实例对象后加入到服务对象列表;
f.客户端当进行远程过程调用时,通过套接字将调用请求传递至对应的机器节点,所述客户端在请求发送后进入阻塞状态,等待所述对应的机器节点的返回结果;所述调用请求包括要执行的对象类名、成员函数名及参数;
g.所述对应的机器节点在收到所述调用请求后,首先根据对象类名在服务对象列表中找到对应的实例对象,然后根据成员函数名通过Qt元对象***找到对应类的Slot函数的元对象方法,再通过解析所述元对象方法的参数类型,依次将传入的参数转换成对应Slot函数所需的参数类型,然后通过元对象的invoke方法执行所述Slot函数,实现客户端的请求;
h.所述对应的机器节点将对应的执行结果以及函数返回结果通过套接字发送至客户端,至此所述对应的机器节点完成了一次远程过程调用服务请求;
i.客户端在收到所述对应的机器节点的执行结果以及函数返回结果后,首先根据所述执行结果判断执行是否成功:如果执行成功,则提取过程调用的函数返回结果并结束阻塞状态,至此客户端发起的远程过程调用执行结束;如果执行失败,则根据执行结果错误代码进行相应的处理。
进一步的,客户端设置过程调用超时时间,如果在指定的时间内所述对应的机器节点没有响应或没有将执行结果或函数返回结果传递至客户端,过程调用自动结束并返回超时的错误代码。
有益效果:本发明的多节点数据交互的实现方法,通过远程过程调用实现数据交互,远程过程调用的底层采用Qt元对象***实现。远程过程调用中,从QObject子类定位远程过程调用指定的Slot槽函数并执行,实现了灵活的过程调用处理。根据C++重载的特点,可以在QObject子类定义参数不同的同一个函数,这样调用者就可以根据自己的需要选择适合的函数,让远程过程调用变得更加灵活。利用本发明方法实现的基于Qt元对象的远程过程调用机制,当需要添加服务内容时,只需要在QObject子类中增加相应的Slot槽函数或添加新的QObject子类实例,然后远程过程调用客户端在调用时指定函数名称和函数参数即可完成调用。因此,基于Qt元对象***的远程过程调用服务模块在扩展、升级与维护等方面非常简单,同时让***模块的开发更加灵活,而且可以在多个平台上运行。
附图说明
图1是传统方式下节点之间的数据业务处理结构图;
图2是采用RPC实现节点之间的数据交互处理结构图;
图3是本发明多节点数据交互多节点通讯示意图;
图4是多节点数据交互的实现方法流程图;
图5是客户端在执行远程过程调用时的调用形式。
具体实施方式
下面结合附图对本发明做更进一步的解释。
如图3所示,一种多节点数据交互的实现方法,在每个机器节点上布置数据服务模块,任一节点上的数据服务模块用于实现该节点自身进程之间的数据交互,不同节点上的数据服务模块实现不同节点进程之间的数据交互。数据服务模块基于远程过程调用协议实现进程间的数据交互,远程过程调用协议的底层通过Qt元对象***实现。节点之间的数据交互包括数据访问与操作、文件传输以及节点的数据备份;远程调用过程基于Qt元对象***实现服务查找、参数输入以及结果返回。进程与本节点进程或其他节点进程之间进行数据交互操作的时候均为同步过程调用;对于同一节点之间的数据交互,通讯方式采用管道;对于不同节点之间的数据交互,通讯方式根据IP地址采用套接字;通讯过程中数据传输采用加密的方式进行传输,提高***的可靠性与安全性。Qt元对象***中QObject子类的函数所对应的输入参数作为过程调用的输入,函数的返回值作为过程调用的输出结果。
Qt是一个跨平台C++图形用户界面应用程序开发框架。Qt是面向对象的框架,使用特殊的代码生成扩展以及一些宏,易于扩展,允许组件编程;扩展称为元对象编译器(MetaObject Compiler,moc)。Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt的元对象***实现了下面几个功能:为从QObject子类继承的类提供了元对象***的支持;通过在类的定义中申明Q_OBJECT宏让该类可以使用元对象的特性,如动态属性(Dynamic Property)、信号(Signal)和槽(Slot);元对象编译器moc(Meta Object Compiler)为每个QObject子对象自动生成代码来实现元对象特性。槽从本质上来讲就是QObject子类的一个函数,一般用于信号被触发时的处理,与普通函数不同的是,该函数可以被Qt元对象***所辨识。当某个槽连接到某个信号上后,当信号触发后,Qt的元对象***会依次调用所有连接到该信号的槽。通过类的元对象***,可以通过元对象提供的函数得到这个类的所有属性、信号以及槽的相关信息。通过元对象***提供的槽的相关信息,可以知道该槽的名称、参数个数、参数类型和返回值类型。本发明的远程过程调用过程正是利用Qt元对象***的这个特性,从QObject子类定位远程过程调用指定的槽函数并执行,实现了灵活的过程调用处理。
如图4所示,本发明方法中不同节点之间进行数据交互时,远程过程调用包括如下具体步骤:
a.机器节点按照功能分类,从QObject子类继承得到若干个对象,节点之间的远程过程调用通过所述若干个对象所对应的Slot函数实现,并将所述QObject子类实例化为实例对象后加入到服务对象列表;
b.客户端当进行远程过程调用时,通过套接字将调用请求传递至对应的机器节点,客户端在请求发送后进入阻塞状态,等待所述对应的机器节点的返回结果;其中,调用请求包括要执行的对象类名、成员函数名及参数;
c.对应的机器节点的数据服务模块在收到调用请求后,将该调用请求传递至函数解析调用模块;首先根据对象类名在服务对象列表中找到对应的实例对象,然后根据成员函数名通过Qt元对象***找到对应类的成员函数的元对象方法,再通过解析该元对象方法的参数类型,依次将传入的参数转换成对应Slot函数所需的参数类型,然后通过元对象的invoke方法执行Slot函数,实现客户端的请求。如果调用者请求执行的Slot函数不存在或参数不匹配,则会返回错误信息给客户端并放弃此次调用请求。其中,Qt元对象***中Slot函数以插件的形式存在,并通过预定义的标准接口同Qt主程序互相交互。因此,通过插件的方式提供过程调用服务,增加、删除或修改某个过程调用时仅需要对插件进行维护,不需要修改主程序。因此基于Qt插件技术的远程过程调用服务模块在扩展、升级与维护等方面非常简单,同时让***模块的开发更加灵活,而且可以在多个平台上运行。
d.对应的机器节点将对应的执行结果以及函数返回结果通过套接字发送至客户端,至此对应的机器节点完成了一次远程过程调用服务请求;
e.客户端在收到对应的机器节点的执行结果以及函数返回结果后,由客户端的服务模块通知进相应程调用回调函数,首先根据执行结果判断执行是否成功:如果执行成功,则提取过程调用的函数返回结果并结束阻塞状态,至此客户端发起的远程过程调用执行结束。客户端设置过程调用超时时间,如果在指定的时间内对应的机器节点没有响应或没有将执行结果或函数返回结果传递至客户端,过程调用自动结束并返回超时的错误代码。当客户端就收到对应的机器节点的返回结果后,通过分析返回结果判断程序是否正确执行还是发生了函数不存在或者参数不匹配之类的错误,然后将远程过程调用客户端就可以根据对应的机器节点的结果继续执行自己的处理流程。客户端在执行远程过程调用时的调用形式如图5所示。
根据C++重载的特点,可以在QObject子类定义参数不同的同一个函数,这样通过远程调用进行数据交互时,调用者就可以根据自己的需要选择适合的函数,让远程过程调用变得更加灵活。
使用本发明中所阐述的方法后,极大减轻了分布式***在进行多机交互开发的工作量,使得分布式***在模块设计方面更合理、模块之间更独立、更易于软件维护。服务器模块采用插件的方式提供调用服务,让***设计更加灵活,如果需要增加或修改服务时只需要编写新的插件即可,而不需要修改已有的代码;利用Qt元对象***可以很方便的实现面向对象的远程过程调用,让远程过程的调用设计变得简单快捷,不需要再去实现传统过程调用中的Proxy/Stub机制。基于插件方式的服务提供设计使得***在数据处理方面更加灵活,服务提供模块可以很方便的进行修改和替换,极大提高了***的可定制性。本发明实现的方法大大减轻了分布式***在数据处理和信息交互的网络流量,降低了分布式***开发的复杂程度,进程之间的业务处理像本地函数调用一样简单,降低了***开发的工作量和复杂程度,让整个***运行也变得更加稳定。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (3)
1.一种多节点数据交互的实现方法,其特征在于:在每个节点上设置数据服务模块,任一节点上的数据服务模块用于实现该节点自身进程之间的数据交互,同时不同节点上的数据服务模块实现不同节点进程之间的数据交互;所述数据服务模块通过远程过程调用协议实现进程间的数据交互,所述远程过程调用协议的底层通过Qt元对象***实现;所述远程过程调用协议的底层通过Qt元对象***实现时,Qt元对象***中QObject子类的Slot函数所对应的输入参数作为过程调用的输入,Slot函数的返回值作为过程调用的输出结果;
所述远程过程调用包括如下具体步骤:
a.机器节点按照功能分类,从QObject子类继承得到若干个对象,节点之间的远程过程调用通过所述若干个对象所对应的Slot函数实现,并将所述QObject子类实例化为实例对象后加入到服务对象列表;
b.客户端当进行远程过程调用时,通过套接字将调用请求传递至对应的机器节点,所述客户端在请求发送后进入阻塞状态,等待所述对应的机器节点的返回结果;所述调用请求包括要执行的对象类名、成员函数名及参数;
c.所述对应的机器节点在收到所述调用请求后,首先根据对象类名在服务对象列表中找到对应的实例对象,然后根据成员函数名通过Qt元对象***找到对应类的Slot函数的元对象方法,再通过解析所述元对象方法的参数类型,依次将传入的参数转换成对应Slot函数所需的参数类型,然后通过元对象的invoke方法执行所述Slot函数,实现客户端的请求;
d.所述对应的机器节点将对应的执行结果以及函数返回结果通过套接字发送至客户端,至此所述对应的机器节点完成了一次远程过程调用服务请求;
客户端在收到所述对应的机器节点的执行结果以及函数返回结果后,首先根据所述执行结果判断执行是否成功:如果执行成功,则提取过程调用的函数返回结果并结束阻塞状态,至此客户端发起的远程过程调用执行结束;如果执行失败,则根据执行结果错误代码进行相应的处理。
2.根据权利要求1所述的一种多节点数据交互的实现方法,其特征在于:所述远程过程调用中,当客户端任一进程需要获得其他机器节点的变化数据的时候,不同节点之间变化数据的通知包括如下步骤:首先在客户端的数据服务模块上对所述数据或该数据对象类型进行注册;当其它机器节点的数据变化后,将变化数据发送给客户端的数据服务模块;然后由客户端的服务模块通过进程间过程调用通知所述注册数据或数据对象类型所对应的进程,在所述对应进程的进程空间内执行相应的回调函数。
3.根据权利要求1所述的一种多节点数据交互的实现方法,其特征在于:客户端设置过程调用超时时间,如果在指定的时间内所述对应的机器节点没有响应或没有将执行结果或函数返回结果传递至客户端,过程调用自动结束并返回超时的错误代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510034019.2A CN104615489B (zh) | 2015-01-22 | 2015-01-22 | 一种多节点数据交互的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510034019.2A CN104615489B (zh) | 2015-01-22 | 2015-01-22 | 一种多节点数据交互的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104615489A CN104615489A (zh) | 2015-05-13 |
CN104615489B true CN104615489B (zh) | 2018-02-23 |
Family
ID=53149945
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510034019.2A Active CN104615489B (zh) | 2015-01-22 | 2015-01-22 | 一种多节点数据交互的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104615489B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105847057A (zh) * | 2016-03-29 | 2016-08-10 | 乐视控股(北京)有限公司 | 故障处理方法及装置 |
CN107329842B (zh) * | 2017-06-29 | 2020-11-10 | 福建新和兴信息技术有限公司 | 基于Qt信号槽机制的获取数据的方法及终端 |
CN109426571B (zh) * | 2017-08-28 | 2022-05-13 | 阿里巴巴集团控股有限公司 | 函数调用和数据访问的方法、***、存储介质、处理器和装置 |
CN108228365B (zh) * | 2017-12-28 | 2021-04-06 | 杭州马猴烧韭科技有限公司 | 一种函数请求发送方法、函数请求调用方法及装置 |
CN108491279A (zh) * | 2018-03-15 | 2018-09-04 | 南京智格电力科技有限公司 | 一种基于对象机制的分布式***进程间通讯方法 |
CN108491280B (zh) * | 2018-03-20 | 2022-03-01 | 南京丹迪克科技开发有限公司 | 一种进程间的数据交互方法及装置 |
CN109240834B (zh) * | 2018-07-10 | 2021-01-01 | 武汉斗鱼网络科技有限公司 | 一种优化方法、计算机设备和存储介质 |
CN109542641A (zh) * | 2018-11-14 | 2019-03-29 | 中国联合网络通信集团有限公司 | 服务调用方法、装置及*** |
CN114039974B (zh) * | 2021-10-20 | 2024-05-31 | 支付宝(杭州)信息技术有限公司 | 向用户提供设备服务的方法、装置、存储介质及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697139A (zh) * | 2009-11-06 | 2010-04-21 | 金蝶软件(中国)有限公司 | 一种远程过程调用方法、装置和注册库 |
CN102523225A (zh) * | 2011-12-22 | 2012-06-27 | 浙江国自机器人技术有限公司 | 分布式松耦合构架中的解耦方法及分布式松耦合构架平台 |
CN103116520A (zh) * | 2012-11-02 | 2013-05-22 | 深圳键桥通讯技术股份有限公司 | 基于tcp/ udp的远程过程调用rpc的方法 |
CN103152412A (zh) * | 2013-02-28 | 2013-06-12 | 福建三元达通讯股份有限公司 | 基于qt的多媒体联网信息发布终端*** |
CN103529816A (zh) * | 2013-10-30 | 2014-01-22 | 中国科学院自动化研究所 | 一种基于Qt的上位机控制*** |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7197712B2 (en) * | 2003-11-18 | 2007-03-27 | Essex Radez Llc | Server visualization and control |
-
2015
- 2015-01-22 CN CN201510034019.2A patent/CN104615489B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697139A (zh) * | 2009-11-06 | 2010-04-21 | 金蝶软件(中国)有限公司 | 一种远程过程调用方法、装置和注册库 |
CN102523225A (zh) * | 2011-12-22 | 2012-06-27 | 浙江国自机器人技术有限公司 | 分布式松耦合构架中的解耦方法及分布式松耦合构架平台 |
CN103116520A (zh) * | 2012-11-02 | 2013-05-22 | 深圳键桥通讯技术股份有限公司 | 基于tcp/ udp的远程过程调用rpc的方法 |
CN103152412A (zh) * | 2013-02-28 | 2013-06-12 | 福建三元达通讯股份有限公司 | 基于qt的多媒体联网信息发布终端*** |
CN103529816A (zh) * | 2013-10-30 | 2014-01-22 | 中国科学院自动化研究所 | 一种基于Qt的上位机控制*** |
Also Published As
Publication number | Publication date |
---|---|
CN104615489A (zh) | 2015-05-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104615489B (zh) | 一种多节点数据交互的实现方法 | |
RU2379755C2 (ru) | Система и способ для совместного использования объектов между компьютерами по сети | |
US6317773B1 (en) | System and method for creating an object oriented transaction service that interoperates with procedural transaction coordinators | |
CN111309374A (zh) | 一种微服务***和微服务***中的服务调用方法 | |
Martin et al. | A novel approach to decentralized workflow enactment | |
CN107590072A (zh) | 一种应用开发和测试的方法和装置 | |
JPH09506725A (ja) | オブジェクト指向ルール・ベース・プロトコル・システム | |
CN109302321A (zh) | 服务器、业务需求处理***、方法和监控*** | |
CN113067900B (zh) | 智能合约的部署方法及装置 | |
CN101576978A (zh) | 分布式工作流制定方法、执行方法及执行*** | |
CN103634138A (zh) | 分布式调度的远程管理与运维方法及其*** | |
CN109656688A (zh) | 一种实现分布式业务规则的方法、***和服务器 | |
CN110798357A (zh) | 一种基于门票s-gds数据映射协议的api通信装置及方法 | |
CN114640610B (zh) | 基于云原生的服务治理方法、装置及存储介质 | |
CN102281197A (zh) | 一种rfid路由器架构*** | |
Lomov et al. | Subscription operation in Smart-M3 | |
CN107480302A (zh) | 一种基于企业级应用场景的松耦合数据集成同步实现方法 | |
Autili et al. | On the automated synthesis of enterprise integration patterns to adapt choreography-based distributed systems | |
CN115658244A (zh) | 基于微服务的分布式批量处理方法、***及注册中心 | |
US10489213B2 (en) | Execution of a method at a cluster of nodes | |
Berry et al. | The A1√ architecture model | |
US20240062113A1 (en) | Systems and methods for scalable and flexible federated learning frameworks | |
Baraki et al. | MOCCAA: A Delta-synchronized and Adaptable Mobile Cloud Computing Framework. | |
Sommers et al. | Cluster-based computing with active, persistent objects on the web | |
Bao-Qing et al. | P2P distributed cooperative work model based on JXTA platform |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |