书签 分享 收藏 举报 版权申诉 / 12

基于BOOST的出站式RFI/RMI服务实现方法及通信系统.pdf

  • 上传人:b***
  • 文档编号:4839883
  • 上传时间:2018-11-16
  • 格式:PDF
  • 页数:12
  • 大小:5.53MB
  • 摘要
    申请专利号:

    CN201210521645.0

    申请日:

    2012.12.06

    公开号:

    CN103019820A

    公开日:

    2013.04.03

    当前法律状态:

    授权

    有效性:

    有权

    法律详情:

    授权|||实质审查的生效IPC(主分类):G06F 9/46申请日:20121206|||公开

    IPC分类号:

    G06F9/46

    主分类号:

    G06F9/46

    申请人:

    厦门市美亚柏科信息股份有限公司

    发明人:

    侯绍东

    地址:

    361000 福建省厦门市软件园二期观日路12号美亚柏科大厦

    优先权:

    专利代理机构:

    深圳市博锐专利事务所 44275

    代理人:

    张明

    PDF完整版下载: PDF下载
    内容摘要

    本发明公开了一种基于BOOST的出站式RFI/RMI服务实现方法及通信系统,其中,所述基于BOOST的出站式RFI/RMI服务实现方法,包括S01、中心节点接收计算节点发出的请求连接信号,所述中心节点对请求连接信号处理后向计算节点发送握手请求;S02、中心节点接收计算节点的握手应答后,生成参数输入流,并将其发送至计算节点;S03、计算节点接收参数输入流,处理参数输入流,生成包含结果序列与输出参数的参数输出流;S04、计算节点将参数输出流返回给中心节点并由中心节点对参数输出流进行处理,通信结束。本发明能够提高客户端与服务端间的通信灵活度,极大简化客户端的调用程序,增加通信的可靠性。

    权利要求书

    权利要求书一种基于BOOST的出站式RFI/RMI服务实现方法,其特征在于,包括如下步骤:
    S01、中心节点接收计算节点发出的请求连接信号,所述中心节点对请求连接信号处理后向计算节点发送握手请求;
    S02、中心节点接收计算节点的握手应答后,利用第一代理函数将中心节点的服务函数中远程调用服务参数序列化后生成参数输入流,并将包含有服务函数名和序列化远程调用服务参数的参数输入流发送至计算节点;
    S03、计算节点接收中心节点发送的参数输入流,并根据参数输入流中的函数名查询服务函数的第二代理函数,并利用第二代理函数将序列化的远程调用服务参数反序列化,调用服务函数,计算反序列化后远程调用服务参数的结果并输出远程调用服务参数,利用第二代理函数对远程调用服务参数的结果进行序列化后,生成包含结果序列与输出参数的参数输出流,其中,第一代理函数及第二代理函数均由代理函数模板生成,第一代理函数与第二代理函数相对应,代理函数模板由基于boost库中的迭代宏递归定义;
    S04、计算节点将参数输出流返回给中心节点并由中心节点对参数输出流进行处理,通信结束。
    根据权利要求1所述的基于BOOST的出站式RFI/RMI服务实现方法,其特征在于,步骤S03中还包括判断远程调用服务参数的类型,若接收的参数输入流中的参数类型与计算节点中服务函数相应的参数相同,则根据该参数计算出对应的计算结果,并返回结果真;若接收的参数与服务函数中的参数不同,则停止计算结果,并返回结果假。
    根据权利要求1所述的基于BOOST的出站式RFI/RMI服务实现方法,其特征在于,所述步骤S03中,所述代理函数的生成,包括如下步骤:
    S21、生成代理函数的模板文件并定义迭代宏,该迭代宏包含全部的远程服务调用参数个数;
    S22、代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的代理函数模板;
    S23、调用生成代理函数模板时,根据服务函数的自动匹配参数个数和参数类型,并生成相应的代理函数。
    一种基于BOOST的出站式RFI/RMI通信系统,其特征在于,包括中心节点与计算节点,
    所述中心节点包括第一通信单元、参数输入流生成单元及输出流解析处理单元,所述第一通信模块用于接收计算节点发出的请求连接信号,处理请求连接信号后向计算节点发送握手请求,接收握手应答后向计算节点发送参数输入流及接收计算节点发送的参数输出流;
    所述参数输入流生成单元,利用第一代理函数将中心节点的服务函数中远程调用服务参数序列化后生成参数输入流,该参数输入流包含有服务函数名和序列化远程调用服务参数;
    所述参数输出流解析单元用于解析并处理参数输出流;
    所述计算节点包括第二通信模块、输入流解析处理单元和参数输出流生成单元,所述第二通信模块用于向中心节点发送请求连接,接收中心节点的握手请求并发送握手应答,接收中心节点发送的参数输入流及向中心节点发送参数输出流;
    所述输入流解析处理单元并根据参数输入流中的函数名查询服务函数的第二代理函数,并利用第二代理函数将序列化的远程调用服务参数反序列化,调用服务函数,计算反序列化后远程调用服务参数的结果并输出远程调用服务参数;
    所述参数输出流生成单元,利用第二代理函数对远程调用服务参数的结果进行序列化后,生成包含结果与输出参数的参数输出流。
    根据权利要求4所述的一种基于BOOST的出站式RFI/RMI通信系统,其特征在于,所述计算节点还包括判断单元,用于判断远程调用服务参数的类型,若接收的参数输入流中的参数类型与计算节点中服务函数相应的参数相同,则根据该参数计算出对应的计算结果,并返回结果真;若接收的参数与服务函数中的参数不同,则停止计算结果,并返回结果假。
    根据权利要求4所述的一种基于BOOST的出站式RFI/RMI通信系统,其特征在于,所述计算节点与中心节点均包括代理函数生成单元,用于生成代理函数,具体为:生成代理函数的模板文件并定义迭代宏,该迭代宏包含全部的远程服务调用参数;代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的代理函数模板;调用代理函数模板时,根据服务函数的自动匹配参数个数和参数类型,并生成相应的代理函数。

    说明书

    说明书基于BOOST的出站式RFI/RMI服务实现方法及通信系统
    技术领域
    本发明涉及计算机网络通信技术领域,尤其涉及一种基于BOOST的出站式RFI/RMI服务实现方法及通信系统。
    背景技术
    Sun Java RMI(Remote Method Invocation)是一项由客户端向服务器发起连接,发送请求并得到应答的信息交互技术。在分布式服务情况下,由接入计算机提供应答服务,并由中心调度计算机发出请求。在分布式计算模型中,当计算节点需要动态扩展时,中心节点无法直接获得计算节点的连接地址,故需要由计算节点向中心节点发起连接同时提供服务接口,其具体的实现步骤是: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应用场景如下,计算节点定义一个服务函数:
    bool Add(Vector v1,Vector v2,Vector&r);
    如果参数正确,则把v1和v2的计算结果输出到r,并返回真;否则返回假。
    在计算节点初始化过程中,使用RegisterFunction将函数注册为服务,该
    RegisterFunction(“Add”,Add);
    其中第一个参数指定服务的名称,第二个参数是服务函数。
    在中心节点,通过如下方式调用Add服务:
    bool success=RemoteCall<bool(*)(Vector,Vector,Vector&)>(nodeId,“Add”,v1,v2,r);
    整个调用过程就完成了,本文所述方案自动完成参数和返回结果序列化、服务函数映射和调用。
    上述中RegisterFunction的定义如下:

    其中g_service_table是已注册的服务函数表,里面的每个项都是函数入口,定义如下:

    这里agent是拥有固定形式的函数指针,GetFunctionAgent为每个服务函数匹配一个代理函数并赋给agent,此后agent是唯一知道函数原型的代理接口。当网络监听线程读取到中心节点的请求后,将参数流转换成input,并根据请求的函数名从服务表检索到函数入口,再借助代理函数和原函数指针function调用真正的服务。最后将返回结果序列化到输出流,发送回中心节点。
    对于RMI的服务,方法相似


    在会话式服务中,通过构造函数注册服务对象中的任何函数,即可对外开放服务。在中心节点通过
    RemoteCall<wstring(*)(wstring,int,wstring&)>(transportId,“PromptMessage”,m,c,o);
    可访问服务对象的公开方法。这里transportId同时标识了节点计算机和会话对象。在本架构中,会话对象的生命周期是和TCP连接绑定的,在连接断开时自动释放,所以传输ID可以标识服务对象。
    参阅图2,上述的方案中,所述步骤S03中,所述代理函数的生成,包括如下步骤:
    S21、生成代理函数的模板文件并定义迭代宏,该迭代宏包含全部的远程服务调用参数个数。
    S22、代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的代理函数模板。
    S23、调用生成代理函数模板时,根据服务函数的自动匹配参数个数和参数类型,并生成相应的代理函数。
    代理函数模板利用偏特化和迭代宏技术产生与迭代参数匹配的模板函数。实现文件利用该模板在编译阶段生成与原函数匹配的代理函数实现。具体的实现程序如下:


    本发明基于boost预处理库、序列化库,利用模板自动生成代理函数,实现了出站式的服务架构,允许分布式计算负荷的动态扩展,提供了高效且方便的远程调用机制。通过boost预处理器定义多态函数模板注册服务名和代理函数,使开放服务接口和远程调用仅需一行代码,并且适合于动态变更服务。
    参阅图3,本发明还提供了一种基于BOOST的出站式RFI/RMI服务系统,包括中心节点10与计算节点20,所述中心节点10包括第一通信单元11、参数输入流生成单元12及输出流解析处理单元13,所述第一通信单元11用于接收计算节点20发出的请求连接信号,处理请求连接信号后向计算节点20发送握手请求,接收握手应答后向计算节点20发送参数输入流及接收计算节点20发送的参数输出流;
    所述参数输入流生成单元12,利用第一代理函数将中心节点10的服务函数中远程调用服务参数序列化后生成参数输入流,该参数输入流包含有服务函数名和序列化远程调用服务参数;所述参数输出流解析单元用于解析并处理参数输出流;所述计算节点20包括第二通信单元21、输入流解析处理单元22和参数输出流生成单元23,所述第二通信单元21用于向中心节点10发送请求连接,接收中心节点10的握手请求并发送握手应答,接收中心节点10发送的参数输入流及向中心节点10发送参数输出流;所述输入流解析处理单元22并根据参数输入流中的函数名查询服务函数的第二代理函数,并利用第二代理函数将序列化的远程调用服务参数反序列化,调用服务函数,计算反序列化后远程调用服务参数的结果并输出远程调用服务参数;所述参数输出流生成单元23,利用第二代理函数对远程调用服务参数的结果进行序列化后,生成包含结果与输出参数的参数输出流。
    上述的方案中,所述计算节点20还包括判断单元,用于判断远程调用服务参数的类型,若接收的参数输入流中的参数类型与计算节点20中服务函数相应的参数相同,则根据该参数计算出对应的计算结果,并返回结果真;若接收的参数与服务函数中的参数不同,则停止计算结果,并返回结果假。
    上述的方案中,所述计算节点20与中心节点10均包括代理函数生成单元,用于生成代理函数,具体为:生成代理函数的模板文件并定义迭代宏,该迭代宏包含全部的远程服务调用参数;代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的代理函数模板;调用代理函数模板时,根据服务函数的自动匹配参数个数和参数类型,并生成相应的代理函数。
    本发明提供了一种基于BOOST的出站式RFI/RMI服务实现方法及通信系统,在中心节点采用第一代理函数对远程调用服务参数进行序列化,并将该参数个数与参数类型编码成参数输入流并将其向计算节点发送;计算节点接收该参数输入流后,利用第二代理函数对参数输入流进行反序列处理得出结果,将结果序列化后生成包括结果序列及输出参数的参数输出流并将参数输出流向中心节点发送;中心节点接收并对参数输出流进行处理,实现了计算节点与中心节点的出站服务。本发明通过能够实现客户端与服务端的自动连接、元语言级的函数代理和任一类型参数的序列化,打破了对客户端与服务端参数类型和数量的限制,允许客户端传出参数,并且通信双方不需要事先参照同一服务契约。即在RCF的基础上,省去了对远程对象声明,能够实现出站式的RFI/RMI服务。
    以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

    关 键  词:
    基于 BOOST 出站 RFI RMI 服务 实现 方法 通信 系统
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:基于BOOST的出站式RFI/RMI服务实现方法及通信系统.pdf
    链接地址:https://www.zhuanlichaxun.net/p-4839883.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1