基于boost的出站式rfi/rmi服务实现方法及通信系统的制作方法

文档序号:6383477阅读:183来源:国知局

专利名称::基于boost的出站式rfi/rmi服务实现方法及通信系统的制作方法
技术领域
:本发明涉及计算机网络通信
技术领域
,尤其涉及一种基于BOOST的出站式RFI/RMI服务实现方法及通信系统。
背景技术
:SunJavaRMI(RemoteMethodInvocation)是一项由客户端向服务器发起连接,发送请求并得到应答的信息交互技术。在分布式服务情况下,由接入计算机提供应答服务,并由中心调度计算机发出请求。在分布式计算模型中,当计算节点需要动态扩展时,中心节点无法直接获得计算节点的连接地址,故需要由计算节点向中心节点发起连接同时提供服务接口,其具体的实现步骤是1)计算节点向中心节点发起连接;2)中心节点发出握手请求,计算节点返回基本信息,完成握手;3)中心节点将远程服务的调用参数编码成数据流,通过网络将服务请求发送到计算节点;4)计算节点提取请求参数,调用本地服务,将计算结果编码成数据流,发送回中心节点。其中,基于会话的请求需要计算节点维护中间状态或锁定计算资源,这种情况下,需要将上面的服务封装成基于会话的资源管理器,在会话阶段持续维护计算所需的资源(如文件)和计算的中间结果。由于C++语言没有提供反射机制,即使开启了RTTI(运行时类型信息),也只能为类提供部分运行时特性,无法为程序提供自描述能力。WCF由于部署较为麻烦,且效率不如C++高。RCF和WCF—样,只提供了入站式的服务,并且不支持持续会话。而用传统的设计方式实现上述的通信过程中,通信双方耦合性很大,信息交互的时间长,降低了通信的可靠性。
发明内容本发明提出了一种基于BOOST的出站式RFI/RMI服务实现方法及通信系统,能够解决客户端远程调用所需要的函数契约问题,能够提高客户端与服务端间的通信灵活度,极大简化客户端的调用程序,增加通信的可靠性。为解决上述技术问题,本发明米用的一个技术方案是提供一种基于BOOST的出站式RFI/RMI服务实现方法,包括如下步骤S01、中心节点接收计算节点发出的请求连接信号,所述中心节点对请求连接信号处理后向计算节点发送握手请求;S02、中心节点接收计算节点的握手应答后,利用第一代理函数将中心节点的服务函数中远程调用服务参数序列化后生成参数输入流,并将包含有服务函数名和序列化远程调用服务参数的参数输入流发送至计算节点;S03、计算节点接收中心节点发送的参数输入流,并根据参数输入流中的函数名查询服务函数的第二代理函数,并利用第二代理函数将序列化的远程调用服务参数反序列化,调用服务函数,计算反序列化后远程调用服务参数的结果并输出远程调用服务参数,利用第二代理函数对远程调用服务参数的结果进行序列化后,生成包含结果序列与输出参数的参数输出流,其中,第一代理函数及第二代理函数均由代理函数模板生成,第一代理函数与第二代理函数相对应,代理函数模板由基于boost库中的迭代宏递归定义;S04、计算节点将参数输出流返回给中心节点并由中心节点对参数输出流进行处理,通信结束。其中,步骤S03中还包括判断远程调用服务参数的类型,若接收的参数输入流中的参数类型与计算节点中服务函数相应的参数相同,则根据该参数计算出对应的计算结果,并返回结果真;若接收的参数与服务函数中的参数不同,则停止计算结果,并返回结果假。其中,所述步骤S03中,所述代理函数的生成,包括如下步骤S21、生成代理函数的模板文件并定义迭代宏,该迭代宏包含全部的远程服务调用参数个数;S22、代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的代理函数模板;S23、调用生成代理函数模板时,根据服务函数的自动匹配参数个数和参数类型,并生成相应的代理函数。为解决上述技术问题,本发明采用的另一个技术方案是提供一种基于BOOST的出站式RFI/RMI服务系统,包括中心节点与计算节点,所述中心节点包括第一通信单元、参数输入流生成单元及输出流解析处理单元,所述第一通信模块用于接收计算节点发出的请求连接信号,处理请求连接信号后向计算节点发送握手请求,接收握手应答后向计算节点发送参数输入流及接收计算节点发送的参数输出流;所述参数输入流生成单元,利用第一代理函数将中心节点的服务函数中远程调用服务参数序列化后生成参数输入流,该参数输入流包含有服务函数名和序列化远程调用服务参数;所述参数输出流解析单元用于解析并处理参数输出流;所述计算节点包括第二通信模块、输入流解析处理单元和参数输出流生成单元,所述第二通信模块用于向中心节点发送请求连接,接收中心节点的握手请求并发送握手应答,接收中心节点发送的参数输入流及向中心节点发送参数输出流;所述输入流解析处理单元并根据参数输入流中的函数名查询服务函数的第二代理函数,并利用第二代理函数将序列化的远程调用服务参数反序列化,调用服务函数,计算反序列化后远程调用服务参数的结果并输出远程调用服务参数;所述参数输出流生成单元,利用第二代理函数对远程调用服务参数的结果进行序列化后,生成包含结果与输出参数的参数输出流。优选的,所述计算节点还包括判断单元,用于判断远程调用服务参数的类型,若接收的参数输入流中的参数类型与计算节点中服务函数相应的参数相同,则根据该参数计算出对应的计算结果,并返回结果真;若接收的参数与服务函数中的参数不同,则停止计算结果,并返回结果假。优选的,所述计算节点与中心节点均包括代理函数生成单元,用于生成代理函数,具体为生成代理函数的模板文件并定义迭代宏,该迭代宏包含全部的远程服务调用参数;代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的代理函数模板;调用代理函数模板时,根据服务函数的自动匹配参数个数和参数类型,并生成相应的代理函数。本发明的有益技术效果是本发明提供了一种基于BOOST的出站式RFI/RMI服务实现方法及通信系统,在中心节点采用第一代理函数对远程调用服务参数进行序列化,并将该参数个数与参数类型编码成参数输入流并将其向计算节点发送;计算节点接收该参数输入流后,利用第二代理函数对参数输入流进行反序列处理得出结果,将结果序列化后生成包括结果序列及输出参数的参数输出流并将参数输出流向中心节点发送;中心节点接收并对参数输出流进行处理,实现了计算节点与中心节点的出站服务。本发明通过能够实现客户端与服务端的自动连接、元语言级的函数代理和任一类型参数的序列化,打破了对客户端与服务端参数类型和数量的限制,允许客户端传出参数,并且通信双方不需要事先参照同一服务契约。即在RCF的基础上,省去了对远程对象声明,能够实现出站式的RFI/RMI服务。图1是本发明基于BOOST的出站式RFI/RMI服务实现方法的信息交互流图;图2是本发明中生成代理函数的流程图;图3是本发明基于BOOST的出站式RFI/RMI通信系统框图。标号说明10-中心节点,11-第一通信单元,12-参数输入流生成单元,13-输出流解析处理单元;20-计算节点,21-第二通信单元,22-输入流解析处理单元,23-参数输出流生成单元。具体实施例方式为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。本发明中RFI是指远程函数调用,RMI是指远程方法调用,RMI的实现是为了支持基于连接会话的持续会话服务。例如上传文件,不适合于在一次调用中将整个文件完整上传,也不适合在主连接传输文件(可能会阻塞其它服务请求),需要新建连接会话以释放主连接的传输压力并由服务对象管理中间状态和服务期间所需的资源。两种服务方式有一个共同点,都是由提供服务的一方发起连接,由调用服务的一方接受连接,RMI较RFI多了由中心节点向计算节点申请新会话、建立新连接、发送和返回带会话ID握手应答的过程,而本方案的改进点在于利用代理函数对中心节点及计算节点中远程调用参数的处理。请参阅图1,本实施例提供了一种基于BOOST的出站式RFI/RMI服务实现方法,包括如下步骤S01、中心节点接收计算节点发出的请求连接信号,所述中心节点对请求连接信号处理后向计算节点发送握手请求。S02、中心节点接收计算节点的握手应答后,利用第一代理函数将中心节点的服务函数中远程调用服务参数序列化后生成参数输入流,并将包含有服务函数名和序列化远程调用服务参数的参数输入流发送至计算节点。S03、计算节点接收中心节点发送的参数输入流,并根据参数输入流中的函数名查询服务函数的第二代理函数,并利用第二代理函数将序列化的远程调用服务参数反序列化,调用服务函数,计算反序列化后远程调用服务参数的结果并输出远程调用服务参数,利用第二代理函数对远程调用服务参数的结果进行序列化后,生成包含结果序列与输出参数的参数输出流,其中,第一代理函数及第二代理函数均由代理函数模板生成,第一代理函数与第二代理函数相对应,代理函数模板由基于boost库中的迭代宏递归定义。S04、计算节点将参数输出流返回给中心节点并由中心节点对参数输出流进行处理,通信结束。上述的方案中,步骤S03中还包括判断远程调用服务参数的类型,若接收的参数输入流中的参数类型与计算节点中服务函数相应的参数相同,则根据该参数计算出对应的计算结果,并返回结果真;若接收的参数与服务函数中的参数不同,则停止计算结果,并返回结果假。在一个典型的RFI应用场景如下,计算节点定义一个服务函数boolAdd(Vectorvl,Vectorv2,Vector&r);如果参数正确,则把vl和v2的计算结果输出到η并返回真;否则返回假。在计算节点初始化过程中,使用RegisterFunction将函数注册为服务,该RegisterFunction(“Add”,Add);其中第一个参数指定服务的名称,第二个参数是服务函数。在中心节点,通过如下方式调用Add服务boolsuccess=RemoteCalKbool(木)(Vector,Vector,Vector&)>(nodeld,“Add”,vl,v2,r);整个调用过程就完成了,本文所述方案自动完成参数和返回结果序列化、服务函数映射和调用。上述中RegisterFunction的定义如下staticmap<stringName,FunctionEntty>g—service—table;template<typenameF>voidRegisterFunction(stringname,Ffunction)g_service_table[name]=FiinctionEn^^GetFunctionAgenufLinction),function);}其中g—service—table是已注册的服务函数表,里面的每个项都是函数入口,定义如下structFunctionEntryvoid(*agent)(iostream&input,iostream&output,void*function);void*function;这里agent是拥有固定形式的函数指针,GetFunctionAgent为每个服务函数匹配一个代理函数并赋给agent,此后agent是唯一知道函数原型的代理接口。当网络监听线程读取到中心节点的请求后,将参数流转换成input,并根据请求的函数名从服务表检索到函数入口,再借助代理函数和原函数指针function调用真正的服务。最后将返回结果序列化到输出流,发送回中心节点。对于RMI的服务,方法相似权利要求1.一种基于BOOST的出站式RFI/RMI服务实现方法,其特征在于,包括如下步骤501、中心节点接收计算节点发出的请求连接信号,所述中心节点对请求连接信号处理后向计算节点发送握手请求;502、中心节点接收计算节点的握手应答后,利用第一代理函数将中心节点的服务函数中远程调用服务参数序列化后生成参数输入流,并将包含有服务函数名和序列化远程调用服务参数的参数输入流发送至计算节点;503、计算节点接收中心节点发送的参数输入流,并根据参数输入流中的函数名查询服务函数的第二代理函数,并利用第二代理函数将序列化的远程调用服务参数反序列化,调用服务函数,计算反序列化后远程调用服务参数的结果并输出远程调用服务参数,利用第二代理函数对远程调用服务参数的结果进行序列化后,生成包含结果序列与输出参数的参数输出流,其中,第一代理函数及第二代理函数均由代理函数模板生成,第一代理函数与第二代理函数相对应,代理函数模板由基于boost库中的迭代宏递归定义;504、计算节点将参数输出流返回给中心节点并由中心节点对参数输出流进行处理,通信结束。2.根据权利要求1所述的基于BOOST的出站式RFI/RMI服务实现方法,其特征在于,步骤S03中还包括判断远程调用服务参数的类型,若接收的参数输入流中的参数类型与计算节点中服务函数相应的参数相同,则根据该参数计算出对应的计算结果,并返回结果真;若接收的参数与服务函数中的参数不同,则停止计算结果,并返回结果假。3.根据权利要求1所述的基于BOOST的出站式RFI/RMI服务实现方法,其特征在于,所述步骤S03中,所述代理函数的生成,包括如下步骤521、生成代理函数的模板文件并定义迭代宏,该迭代宏包含全部的远程服务调用参数个数;522、代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的代理函数模板;523、调用生成代理函数模板时,根据服务函数的自动匹配参数个数和参数类型,并生成相应的代理函数。4.一种基于BOOST的出站式RFI/RMI通信系统,其特征在于,包括中心节点与计算节点,所述中心节点包括第一通信单元、参数输入流生成单元及输出流解析处理单元,所述第一通信模块用于接收计算节点发出的请求连接信号,处理请求连接信号后向计算节点发送握手请求,接收握手应答后向计算节点发送参数输入流及接收计算节点发送的参数输出流;所述参数输入流生成单元,利用第一代理函数将中心节点的服务函数中远程调用服务参数序列化后生成参数输入流,该参数输入流包含有服务函数名和序列化远程调用服务参数;所述参数输出流解析单元用于解析并处理参数输出流;所述计算节点包括第二通信模块、输入流解析处理单元和参数输出流生成单元,所述第二通信模块用于向中心节点发送请求连接,接收中心节点的握手请求并发送握手应答,接收中心节点发送的参数输入流及向中心节点发送参数输出流;所述输入流解析处理单元并根据参数输入流中的函数名查询服务函数的第二代理函数,并利用第二代理函数将序列化的远程调用服务参数反序列化,调用服务函数,计算反序列化后远程调用服务参数的结果并输出远程调用服务参数;所述参数输出流生成单元,利用第二代理函数对远程调用服务参数的结果进行序列化后,生成包含结果与输出参数的参数输出流。5.根据权利要求4所述的一种基于BOOST的出站式RFI/RMI通信系统,其特征在于,所述计算节点还包括判断单元,用于判断远程调用服务参数的类型,若接收的参数输入流中的参数类型与计算节点中服务函数相应的参数相同,则根据该参数计算出对应的计算结果,并返回结果真;若接收的参数与服务函数中的参数不同,则停止计算结果,并返回结果假。6.根据权利要求4所述的一种基于BOOST的出站式RFI/RMI通信系统,其特征在于,所述计算节点与中心节点均包括代理函数生成单元,用于生成代理函数,具体为生成代理函数的模板文件并定义迭代宏,该迭代宏包含全部的远程服务调用参数;代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的代理函数模板;调用代理函数模板时,根据服务函数的自动匹配参数个数和参数类型,并生成相应的代理函数。全文摘要本发明公开了一种基于BOOST的出站式RFI/RMI服务实现方法及通信系统,其中,所述基于BOOST的出站式RFI/RMI服务实现方法,包括S01、中心节点接收计算节点发出的请求连接信号,所述中心节点对请求连接信号处理后向计算节点发送握手请求;S02、中心节点接收计算节点的握手应答后,生成参数输入流,并将其发送至计算节点;S03、计算节点接收参数输入流,处理参数输入流,生成包含结果序列与输出参数的参数输出流;S04、计算节点将参数输出流返回给中心节点并由中心节点对参数输出流进行处理,通信结束。本发明能够提高客户端与服务端间的通信灵活度,极大简化客户端的调用程序,增加通信的可靠性。文档编号G06F9/46GK103019820SQ20121052164公开日2013年4月3日申请日期2012年12月6日优先权日2012年12月6日发明者侯绍东申请人:厦门市美亚柏科信息股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1