《基于BOOST的出站式RFI/RMI服务实现方法及通信系统.pdf》由会员分享,可在线阅读,更多相关《基于BOOST的出站式RFI/RMI服务实现方法及通信系统.pdf(12页完整版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103019820 A (43)申请公布日 2013.04.03 CN 103019820 A *CN103019820A* (21)申请号 201210521645.0 (22)申请日 2012.12.06 G06F 9/46(2006.01) (71)申请人 厦门市美亚柏科信息股份有限公司 地址 361000 福建省厦门市软件园二期观日 路 12 号美亚柏科大厦 (72)发明人 侯绍东 (74)专利代理机构 深圳市博锐专利事务所 44275 代理人 张明 (54) 发明名称 基于 BOOST 的出站式 RFI/RMI 服务实现方法 及通信系统 (57) 摘要 本发。
2、明公开了一种基于 BOOST 的出站式 RFI/ RMI 服务实现方法及通信系统, 其中, 所述基于 BOOST的出站式RFI/RMI服务实现方法, 包括S01、 中心节点接收计算节点发出的请求连接信号, 所 述中心节点对请求连接信号处理后向计算节点发 送握手请求 ; S02、 中心节点接收计算节点的握手 应答后, 生成参数输入流, 并将其发送至计算节 点 ; S03、 计算节点接收参数输入流, 处理参数输 入流, 生成包含结果序列与输出参数的参数输出 流 ; S04、 计算节点将参数输出流返回给中心节点 并由中心节点对参数输出流进行处理, 通信结束。 本发明能够提高客户端与服务端间的通信灵活。
3、 度, 极大简化客户端的调用程序, 增加通信的可靠 性。 (51)Int.Cl. 权利要求书 2 页 说明书 7 页 附图 2 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 2 页 说明书 7 页 附图 2 页 1/2 页 2 1. 一种基于 BOOST 的出站式 RFI/RMI 服务实现方法, 其特征在于, 包括如下步骤 : S01、 中心节点接收计算节点发出的请求连接信号, 所述中心节点对请求连接信号处理 后向计算节点发送握手请求 ; S02、 中心节点接收计算节点的握手应答后, 利用第一代理函数将中心节点的服务函数 中远程调用服务参数序列化后生成参数输入流,。
4、 并将包含有服务函数名和序列化远程调用 服务参数的参数输入流发送至计算节点 ; S03、 计算节点接收中心节点发送的参数输入流, 并根据参数输入流中的函数名查询服 务函数的第二代理函数, 并利用第二代理函数将序列化的远程调用服务参数反序列化, 调 用服务函数, 计算反序列化后远程调用服务参数的结果并输出远程调用服务参数, 利用第 二代理函数对远程调用服务参数的结果进行序列化后, 生成包含结果序列与输出参数的参 数输出流, 其中, 第一代理函数及第二代理函数均由代理函数模板生成, 第一代理函数与第 二代理函数相对应, 代理函数模板由基于 boost 库中的迭代宏递归定义 ; S04、 计算节点将。
5、参数输出流返回给中心节点并由中心节点对参数输出流进行处理, 通 信结束。 2.根据权利要求1所述的基于BOOST的出站式RFI/RMI服务实现方法, 其特征在于, 步 骤 S03 中还包括判断远程调用服务参数的类型, 若接收的参数输入流中的参数类型与计算 节点中服务函数相应的参数相同, 则根据该参数计算出对应的计算结果, 并返回结果真 ; 若 接收的参数与服务函数中的参数不同, 则停止计算结果, 并返回结果假。 3.根据权利要求1所述的基于BOOST的出站式RFI/RMI服务实现方法, 其特征在于, 所 述步骤 S03 中, 所述代理函数的生成, 包括如下步骤 : S21、 生成代理函数的模板。
6、文件并定义迭代宏, 该迭代宏包含全部的远程服务调用参数 个数 ; S22、 代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的代理 函数模板 ; S23、 调用生成代理函数模板时, 根据服务函数的自动匹配参数个数和参数类型, 并生 成相应的代理函数。 4. 一种基于 BOOST 的出站式 RFI/RMI 通信系统, 其特征在于, 包括中心节点与计算节 点, 所述中心节点包括第一通信单元、 参数输入流生成单元及输出流解析处理单元, 所述 第一通信模块用于接收计算节点发出的请求连接信号, 处理请求连接信号后向计算节点发 送握手请求, 接收握手应答后向计算节点发送参数输入流及接收计算节。
7、点发送的参数输出 流 ; 所述参数输入流生成单元, 利用第一代理函数将中心节点的服务函数中远程调用服务 参数序列化后生成参数输入流, 该参数输入流包含有服务函数名和序列化远程调用服务参 数 ; 所述参数输出流解析单元用于解析并处理参数输出流 ; 所述计算节点包括第二通信模块、 输入流解析处理单元和参数输出流生成单元, 所述 第二通信模块用于向中心节点发送请求连接, 接收中心节点的握手请求并发送握手应答, 接收中心节点发送的参数输入流及向中心节点发送参数输出流 ; 权 利 要 求 书 CN 103019820 A 2 2/2 页 3 所述输入流解析处理单元并根据参数输入流中的函数名查询服务函数的。
8、第二代理函 数, 并利用第二代理函数将序列化的远程调用服务参数反序列化, 调用服务函数, 计算反序 列化后远程调用服务参数的结果并输出远程调用服务参数 ; 所述参数输出流生成单元, 利用第二代理函数对远程调用服务参数的结果进行序列化 后, 生成包含结果与输出参数的参数输出流。 5. 根据权利要求 4 所述的一种基于 BOOST 的出站式 RFI/RMI 通信系统, 其特征在于, 所述计算节点还包括判断单元, 用于判断远程调用服务参数的类型, 若接收的参数输入流 中的参数类型与计算节点中服务函数相应的参数相同, 则根据该参数计算出对应的计算结 果, 并返回结果真 ; 若接收的参数与服务函数中的参。
9、数不同, 则停止计算结果, 并返回结果 假。 6.根据权利要求4所述的一种基于BOOST的出站式RFI/RMI通信系统, 其特征在于, 所 述计算节点与中心节点均包括代理函数生成单元, 用于生成代理函数, 具体为 : 生成代理函 数的模板文件并定义迭代宏, 该迭代宏包含全部的远程服务调用参数 ; 代理函数模板文件 根据迭代宏中的远程服务调用参数生成指定参数个数的代理函数模板 ; 调用代理函数模板 时, 根据服务函数的自动匹配参数个数和参数类型, 并生成相应的代理函数。 权 利 要 求 书 CN 103019820 A 3 1/7 页 4 基于 BOOST 的出站式 RFI/RMI 服务实现方法。
10、及通信系统 技术领域 0001 本发明涉及计算机网络通信技术领域, 尤其涉及一种基于 BOOST 的出站式 RFI/ RMI 服务实现方法及通信系统。 背景技术 0002 Sun Java RMI (Remote Method Invocation) 是一项由客户端向服务器发起连接, 发送请求并得到应答的信息交互技术。 在分布式服务情况下, 由接入计算机提供应答服务, 并由中心调度计算机发出请求。 在分布式计算模型中, 当计算节点需要动态扩展时, 中心节 点无法直接获得计算节点的连接地址, 故需要由计算节点向中心节点发起连接同时提供服 务接口, 其具体的实现步骤是 : 1) 计算节点向中心节点。
11、发起连接 ; 2) 中心节点发出握手请 求, 计算节点返回基本信息, 完成握手 ; 3) 中心节点将远程服务的调用参数编码成数据流, 通过网络将服务请求发送到计算节点 ; 4) 计算节点提取请求参数, 调用本地服务, 将计算结 果编码成数据流, 发送回中心节点。 其中, 基于会话的请求需要计算节点维护中间状态或锁 定计算资源, 这种情况下, 需要将上面的服务封装成基于会话的资源管理器, 在会话阶段持 续维护计算所需的资源 (如文件) 和计算的中间结果。由于 C+ 语言没有提供反射机制, 即 使开启了 RTTI(运行时类型信息) , 也只能为类提供部分运行时特性, 无法为程序提供自描 述能力。W。
12、CF 由于部署较为麻烦, 且效率不如 C+ 高。RCF 和 WCF 一样, 只提供了入站式的 服务, 并且不支持持续会话。 而用传统的设计方式实现上述的通信过程中, 通信双方耦合性 很大, 信息交互的时间长, 降低了通信的可靠性。 发明内容 0003 本发明提出了一种基于 BOOST 的出站式 RFI/RMI 服务实现方法及通信系统, 能够 解决客户端远程调用所需要的函数契约问题, 能够提高客户端与服务端间的通信灵活度, 极大简化客户端的调用程序, 增加通信的可靠性。 0004 为解决上述技术问题, 本发明采用的一个技术方案是 : 提供一种基于 BOOST 的出 站式 RFI/RMI 服务实现。
13、方法, 包括如下步骤 : 0005 S01、 中心节点接收计算节点发出的请求连接信号, 所述中心节点对请求连接信号 处理后向计算节点发送握手请求 ; 0006 S02、 中心节点接收计算节点的握手应答后, 利用第一代理函数将中心节点的服务 函数中远程调用服务参数序列化后生成参数输入流, 并将包含有服务函数名和序列化远程 调用服务参数的参数输入流发送至计算节点 ; 0007 S03、 计算节点接收中心节点发送的参数输入流, 并根据参数输入流中的函数名查 询服务函数的第二代理函数, 并利用第二代理函数将序列化的远程调用服务参数反序列 化, 调用服务函数, 计算反序列化后远程调用服务参数的结果并输出。
14、远程调用服务参数, 利 用第二代理函数对远程调用服务参数的结果进行序列化后, 生成包含结果序列与输出参数 的参数输出流, 其中, 第一代理函数及第二代理函数均由代理函数模板生成, 第一代理函数 说 明 书 CN 103019820 A 4 2/7 页 5 与第二代理函数相对应, 代理函数模板由基于 boost 库中的迭代宏递归定义 ; 0008 S04、 计算节点将参数输出流返回给中心节点并由中心节点对参数输出流进行处 理, 通信结束。 0009 其中, 步骤 S03 中还包括判断远程调用服务参数的类型, 若接收的参数输入流中 的参数类型与计算节点中服务函数相应的参数相同, 则根据该参数计算出。
15、对应的计算结 果, 并返回结果真 ; 若接收的参数与服务函数中的参数不同, 则停止计算结果, 并返回结果 假。 0010 其中, 所述步骤 S03 中, 所述代理函数的生成, 包括如下步骤 : 0011 S21、 生成代理函数的模板文件并定义迭代宏, 该迭代宏包含全部的远程服务调用 参数个数 ; 0012 S22、 代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的 代理函数模板 ; 0013 S23、 调用生成代理函数模板时, 根据服务函数的自动匹配参数个数和参数类型, 并生成相应的代理函数。 0014 为解决上述技术问题, 本发明采用的另一个技术方案是 : 提供一种基于 BO。
16、OST 的 出站式 RFI/RMI 服务系统, 包括中心节点与计算节点, 所述中心节点包括第一通信单元、 参 数输入流生成单元及输出流解析处理单元, 所述第一通信模块用于接收计算节点发出的请 求连接信号, 处理请求连接信号后向计算节点发送握手请求, 接收握手应答后向计算节点 发送参数输入流及接收计算节点发送的参数输出流 ; 所述参数输入流生成单元, 利用第一 代理函数将中心节点的服务函数中远程调用服务参数序列化后生成参数输入流, 该参数输 入流包含有服务函数名和序列化远程调用服务参数 ; 所述参数输出流解析单元用于解析并 处理参数输出流 ; 所述计算节点包括第二通信模块、 输入流解析处理单元和。
17、参数输出流生 成单元, 所述第二通信模块用于向中心节点发送请求连接, 接收中心节点的握手请求并发 送握手应答, 接收中心节点发送的参数输入流及向中心节点发送参数输出流 ; 所述输入流 解析处理单元并根据参数输入流中的函数名查询服务函数的第二代理函数, 并利用第二代 理函数将序列化的远程调用服务参数反序列化, 调用服务函数, 计算反序列化后远程调用 服务参数的结果并输出远程调用服务参数 ; 所述参数输出流生成单元, 利用第二代理函数 对远程调用服务参数的结果进行序列化后, 生成包含结果与输出参数的参数输出流。 0015 优选的, 所述计算节点还包括判断单元, 用于判断远程调用服务参数的类型, 若。
18、接 收的参数输入流中的参数类型与计算节点中服务函数相应的参数相同, 则根据该参数计算 出对应的计算结果, 并返回结果真 ; 若接收的参数与服务函数中的参数不同, 则停止计算结 果, 并返回结果假。 0016 优选的, 所述计算节点与中心节点均包括代理函数生成单元, 用于生成代理函数, 具体为 : 生成代理函数的模板文件并定义迭代宏, 该迭代宏包含全部的远程服务调用参数 ; 代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的代理函数模板 ; 调用代理函数模板时, 根据服务函数的自动匹配参数个数和参数类型, 并生成相应的代理 函数。 0017 本发明的有益技术效果是 : 本发明提供了。
19、一种基于 BOOST 的出站式 RFI/RMI 服务 实现方法及通信系统, 在中心节点采用第一代理函数对远程调用服务参数进行序列化, 并 说 明 书 CN 103019820 A 5 3/7 页 6 将该参数个数与参数类型编码成参数输入流并将其向计算节点发送 ; 计算节点接收该参数 输入流后, 利用第二代理函数对参数输入流进行反序列处理得出结果, 将结果序列化后生 成包括结果序列及输出参数的参数输出流并将参数输出流向中心节点发送 ; 中心节点接收 并对参数输出流进行处理, 实现了计算节点与中心节点的出站服务。本发明通过能够实现 客户端与服务端的自动连接、 元语言级的函数代理和任一类型参数的序列。
20、化, 打破了对客 户端与服务端参数类型和数量的限制, 允许客户端传出参数, 并且通信双方不需要事先参 照同一服务契约。即在 RCF 的基础上, 省去了对远程对象声明, 能够实现出站式的 RFI/RMI 服务。 附图说明 0018 图 1 是本发明基于 BOOST 的出站式 RFI/RMI 服务实现方法的信息交互流图 ; 0019 图 2 是本发明中生成代理函数的流程图 ; 0020 图 3 是本发明基于 BOOST 的出站式 RFI/RMI 通信系统框图。 0021 标号说明 : 0022 10- 中心节点, 11- 第一通信单元, 12- 参数输入流生成单元, 13- 输出流解析处理 单元 。
21、; 0023 20- 计算节点, 21- 第二通信单元, 22- 输入流解析处理单元, 23- 参数输出流生成 单元。 具体实施方式 0024 为详细说明本发明的技术内容、 构造特征、 所实现目的及效果, 以下结合实施方式 并配合附图详予说明。 0025 本发明中 RFI 是指远程函数调用, RMI 是指远程方法调用, RMI 的实现是为了支持 基于连接会话的持续会话服务。例如上传文件, 不适合于在一次调用中将整个文件完整上 传, 也不适合在主连接传输文件 (可能会阻塞其它服务请求) , 需要新建连接会话以释放主 连接的传输压力并由服务对象管理中间状态和服务期间所需的资源。 两种服务方式有一个。
22、 共同点, 都是由提供服务的一方发起连接, 由调用服务的一方接受连接, RMI 较 RFI 多了由 中心节点向计算节点申请新会话、 建立新连接、 发送和返回带会话 ID 握手应答的过程, 而 本方案的改进点在于利用代理函数对中心节点及计算节点中远程调用参数的处理。 0026 请参阅图 1, 本实施例提供了一种基于 BOOST 的出站式 RFI/RMI 服务实现方法, 包 括如下步骤 : 0027 S01、 中心节点接收计算节点发出的请求连接信号, 所述中心节点对请求连接信号 处理后向计算节点发送握手请求。 0028 S02、 中心节点接收计算节点的握手应答后, 利用第一代理函数将中心节点的服务。
23、 函数中远程调用服务参数序列化后生成参数输入流, 并将包含有服务函数名和序列化远程 调用服务参数的参数输入流发送至计算节点。 0029 S03、 计算节点接收中心节点发送的参数输入流, 并根据参数输入流中的函数名查 询服务函数的第二代理函数, 并利用第二代理函数将序列化的远程调用服务参数反序列 化, 调用服务函数, 计算反序列化后远程调用服务参数的结果并输出远程调用服务参数, 利 说 明 书 CN 103019820 A 6 4/7 页 7 用第二代理函数对远程调用服务参数的结果进行序列化后, 生成包含结果序列与输出参数 的参数输出流, 其中, 第一代理函数及第二代理函数均由代理函数模板生成,。
24、 第一代理函数 与第二代理函数相对应, 代理函数模板由基于 boost 库中的迭代宏递归定义。 0030 S04、 计算节点将参数输出流返回给中心节点并由中心节点对参数输出流进行处 理, 通信结束。 0031 上述的方案中, 步骤 S03 中还包括判断远程调用服务参数的类型, 若接收的参数 输入流中的参数类型与计算节点中服务函数相应的参数相同, 则根据该参数计算出对应的 计算结果, 并返回结果真 ; 若接收的参数与服务函数中的参数不同, 则停止计算结果, 并返 回结果假。 0032 在一个典型的 RFI 应用场景如下, 计算节点定义一个服务函数 : 0033 bool Add(Vector v。
25、1,Vector v2,Vector 0034 如果参数正确, 则把 v1 和 v2 的计算结果输出到 r, 并返回真 ; 否则返回假。 0035 在计算节点初始化过程中, 使用 RegisterFunction 将函数注册为服务 , 该 0036 RegisterFunction(“Add” ,Add); 0037 其中第一个参数指定服务的名称, 第二个参数是服务函数。 0038 在中心节点, 通过如下方式调用 Add 服务 : 0039 bool success=RemoteCallbool(*)(Vector,Vector,Vector 0040 整个调用过程就完成了, 本文所述方案自动。
26、完成参数和返回结果序列化、 服务函 数映射和调用。 0041 上述中 RegisterFunction 的定义如下 : 0042 0043 其中 g_service_table 是已注册的服务函数表, 里面的每个项都是函数入口, 定 义如下 : 0044 说 明 书 CN 103019820 A 7 5/7 页 8 0045 这里 agent 是拥有固定形式的函数指针, GetFunctionAgent 为每个服务函数匹配 一个代理函数并赋给agent, 此后agent是唯一知道函数原型的代理接口。 当网络监听线程 读取到中心节点的请求后, 将参数流转换成 input, 并根据请求的函数名从服。
27、务表检索到函 数入口, 再借助代理函数和原函数指针 function 调用真正的服务。最后将返回结果序列化 到输出流, 发送回中心节点。 0046 对于 RMI 的服务, 方法相似 0047 0048 0049 在会话式服务中, 通过构造函数注册服务对象中的任何函数, 即可对外开放服务。 在中心节点通过 0050 RemoteCallwstring(*)(wstring,int,wstring 0051 可访问服务对象的公开方法。这里 transportId 同时标识了节点计算机和会话对 象。在本架构中, 会话对象的生命周期是和 TCP 连接绑定的, 在连接断开时自动释放, 所以 传输 ID 。
28、可以标识服务对象。 0052 参阅图 2, 上述的方案中, 所述步骤 S03 中, 所述代理函数的生成, 包括如下步骤 : 0053 S21、 生成代理函数的模板文件并定义迭代宏, 该迭代宏包含全部的远程服务调用 参数个数。 0054 S22、 代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的 代理函数模板。 0055 S23、 调用生成代理函数模板时, 根据服务函数的自动匹配参数个数和参数类型, 并生成相应的代理函数。 0056 代理函数模板利用偏特化和迭代宏技术产生与迭代参数匹配的模板函数。 实现文 件利用该模板在编译阶段生成与原函数匹配的代理函数实现。具体的实现程序如下 。
29、: 0057 说 明 书 CN 103019820 A 8 6/7 页 9 0058 0059 本发明基于 boost 预处理库、 序列化库, 利用模板自动生成代理函数, 实现了出站 式的服务架构, 允许分布式计算负荷的动态扩展, 提供了高效且方便的远程调用机制。 通过 boost 预处理器定义多态函数模板注册服务名和代理函数, 使开放服务接口和远程调用仅 需一行代码, 并且适合于动态变更服务。 0060 参阅图 3, 本发明还提供了一种基于 BOOST 的出站式 RFI/RMI 服务系统, 包括中心 说 明 书 CN 103019820 A 9 7/7 页 10 节点 10 与计算节点 20。
30、, 所述中心节点 10 包括第一通信单元 11、 参数输入流生成单元 12 及 输出流解析处理单元13, 所述第一通信单元11用于接收计算节点20发出的请求连接信号, 处理请求连接信号后向计算节点 20 发送握手请求, 接收握手应答后向计算节点 20 发送参 数输入流及接收计算节点 20 发送的参数输出流 ; 0061 所述参数输入流生成单元 12, 利用第一代理函数将中心节点 10 的服务函数中远 程调用服务参数序列化后生成参数输入流, 该参数输入流包含有服务函数名和序列化远程 调用服务参数 ; 所述参数输出流解析单元用于解析并处理参数输出流 ; 所述计算节点 20 包 括第二通信单元21、。
31、 输入流解析处理单元22和参数输出流生成单元23, 所述第二通信单元 21用于向中心节点10发送请求连接, 接收中心节点10的握手请求并发送握手应答, 接收中 心节点 10 发送的参数输入流及向中心节点 10 发送参数输出流 ; 所述输入流解析处理单元 22 并根据参数输入流中的函数名查询服务函数的第二代理函数, 并利用第二代理函数将序 列化的远程调用服务参数反序列化, 调用服务函数, 计算反序列化后远程调用服务参数的 结果并输出远程调用服务参数 ; 所述参数输出流生成单元 23, 利用第二代理函数对远程调 用服务参数的结果进行序列化后, 生成包含结果与输出参数的参数输出流。 0062 上述的。
32、方案中, 所述计算节点 20 还包括判断单元, 用于判断远程调用服务参数的 类型, 若接收的参数输入流中的参数类型与计算节点 20 中服务函数相应的参数相同, 则根 据该参数计算出对应的计算结果, 并返回结果真 ; 若接收的参数与服务函数中的参数不同, 则停止计算结果, 并返回结果假。 0063 上述的方案中, 所述计算节点20与中心节点10均包括代理函数生成单元, 用于生 成代理函数, 具体为 : 生成代理函数的模板文件并定义迭代宏, 该迭代宏包含全部的远程服 务调用参数 ; 代理函数模板文件根据迭代宏中的远程服务调用参数生成指定参数个数的代 理函数模板 ; 调用代理函数模板时, 根据服务函。
33、数的自动匹配参数个数和参数类型, 并生成 相应的代理函数。 0064 本发明提供了一种基于 BOOST 的出站式 RFI/RMI 服务实现方法及通信系统, 在中 心节点采用第一代理函数对远程调用服务参数进行序列化, 并将该参数个数与参数类型编 码成参数输入流并将其向计算节点发送 ; 计算节点接收该参数输入流后, 利用第二代理函 数对参数输入流进行反序列处理得出结果, 将结果序列化后生成包括结果序列及输出参数 的参数输出流并将参数输出流向中心节点发送 ; 中心节点接收并对参数输出流进行处理, 实现了计算节点与中心节点的出站服务。本发明通过能够实现客户端与服务端的自动连 接、 元语言级的函数代理和。
34、任一类型参数的序列化, 打破了对客户端与服务端参数类型和 数量的限制, 允许客户端传出参数, 并且通信双方不需要事先参照同一服务契约。即在 RCF 的基础上, 省去了对远程对象声明, 能够实现出站式的 RFI/RMI 服务。 0065 以上所述仅为本发明的实施例, 并非因此限制本发明的专利范围, 凡是利用本发 明说明书及附图内容所作的等效结构或等效流程变换, 或直接或间接运用在其他相关的技 术领域, 均同理包括在本发明的专利保护范围内。 说 明 书 CN 103019820 A 10 1/2 页 11 图 1 图 2 说 明 书 附 图 CN 103019820 A 11 2/2 页 12 图 3 说 明 书 附 图 CN 103019820 A 12 。