[发明专利]一种基于长连接的双向调用方法及系统有效
申请号: | 201410438611.4 | 申请日: | 2014-08-29 |
公开(公告)号: | CN105282128B | 公开(公告)日: | 2018-10-16 |
发明(设计)人: | 宋子龙;倪顺;朱红松;于楠;孙利民 | 申请(专利权)人: | 中国科学院信息工程研究所 |
主分类号: | H04L29/06 | 分类号: | H04L29/06;G06F9/54 |
代理公司: | 北京轻创知识产权代理有限公司 11212 | 代理人: | 杨立 |
地址: | 100093 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 连接 双向 调用 方法 系统 | ||
1.一种基于长连接的双向调用方法,其特征在于,具体包括以下步骤:
步骤1:本地端作为连接的发起者,多个远程端作为连接的接收者,本地端分别发起连接请求到多个远程端;
步骤2:每个远程端接收一个连接请求,本地端和每个远程端都相应的获得一个进行传输字节流的连接对象,本地端和远程端建立连接;
步骤3:本地端与远程端协商确定一个序列化协议,并使用该协议包装字节流连接,从而提供一个对象传输的通道;
步骤4:远程端将序列化的连接对象发送到本地端,本地端执行通信线程,通信线程内包含栈,当通信线程执行本地代码,通信线程内栈的栈顶节点成为活跃节点;
步骤5:调用远程方法,通信线程执行远程代码,远程端出现远程通信线程,活跃节点转移到远程端,本地端进入暂停状态,调用远程方法采用传引用的方法;
步骤6:远程通信线程执行完毕,远程通信线程结束,活跃节点从远程端转移到本地端;
步骤7:本地端恢复获得活跃节点,判断当前通信是否完成,如果是,执行步骤8;否则,执行步骤5;
步骤8:判断连接是否还存在于远程端,如果是,执行步骤4;否则,执行步骤9;
步骤9:关闭连接,清除无效连接对象;
所述传引用的方法包括:
步骤a:本地端在发起对远程端的远程过程调用时,先在本地端检查方法中的所有参数;
步骤b:判断参数中是否包括引用对象,如果是,执行步骤c;否则,执行步骤d;
步骤c:本地端将此参数发布为远程对象;
步骤d:将此调用封装为请求对象和响应对象,并发送到远程端进行处理;
步骤e:远程端接收到请求对象并解析,扫描远程引用参数,并将其中作为引用传输的参数用相应的远程对象代替;远程端继续按照正常的过程执行来自本地端的方法调用;
步骤f:远程端完成方法调用之后,搜集结果并判断结果是否为远程对象;如果是,执行步骤g;否则,执行步骤h;
步骤g:远程端将此结果发布为远程对象;
步骤h:将此结果打包为结果对象,设置好与请求对象对应的编号,发送到本地端。
2.根据权利要求1所述的一种基于长连接的双向调用方法,其特征在于,所述步骤9具体包括以下步骤:
步骤9.1:本地端的序列化组件对象向底层的连接对象发送一个关闭连接请求;
步骤9.2:底层的连接对象收到关闭连接请求后,将关闭连接请求发送到远程的连接对象,关闭连接;
步骤9.3:本地端删除无效的序列化组件对象,远程端删除无效的连接对象。
3.根据权利要求2所述的一种基于长连接的双向调用方法,其特征在于,所述步骤1首先查询本地端所支持的序列化协议,并将这些协议的名字按照最期望使用到最不期望使用的顺序排成一个序列,将该序列转换为元素逗号分隔的字符串,本地端将字符串发送到远程端。
4.根据权利要求3所述的一种基于长连接的双向调用方法,其特征在于,所述步骤2具体包括以下步骤:
步骤2.1:远程端接收连接请求和字符串,提取其中每一个元素;
步骤2.2:选取一个元素进行检查,判断远程端是否支持,如果是,执行步骤2.4,否则,执行步骤2.3;
步骤2.3:判断是否还有元素未进行检查,如果是,执行步骤2.2;否则,远程端向本地端返回连接失败信息,结束;
步骤2.4:本地端和远程端建立连接,远程端向本地端发布远程对象,本地端获得对应远程对象的引用对象。
5.根据权利要求1至4中任一项所述的一种基于长连接的双向调用方法,其特征在于,所述步骤1中远程端作为连接的接收者在连接之前已经处在监听状态。
6.根据权利要求5所述的一种基于长连接的双向调用方法,其特征在于,所述步骤9中连接一旦关闭,该连接对象上将不能再传输任何信息,在它上面做的任何读写操作都将抛出异常,该异常将会沿着序列化组件对象传递给上层的使用者。
7.根据权利要求6所述的一种基于长连接的双向调用方法,其特征在于,所述本地端与远程端的连接是持久的,本地端与多个远程端共享。
8.一种基于长连接的双向调用系统,其特征在于,包括连接请求模块、连接建立模块、方法调用模块、远程完成模块和本地恢复模块;
所述连接请求模块用于本地端作为连接的发起者,多个远程端作为连接的接收者,本地端分别发起连接请求到多个远程端;
所述连接建立模块用于控制每个远程端接收一个连接请求,本地端和每个远程端都相应的获得一个进行传输字节流的连接对象,本地端和远程端建立连接;本地端与远程端协商确定一个序列化协议,并使用该协议包装字节流连接,从而提供一个对象传输的通道;
所述方法调用模块用于远程端将序列化的连接对象发送到本地端,本地端执行通信线程,通信线程内包含栈,当通信线程执行本地代码,通信线程内栈的栈顶节点成为活跃节点;所述方法调用模块用于调用远程方法,通信线程执行远程代码,远程端出现远程通信线程,活跃节点转移到远程端,本地端进入暂停状态,所述调用远程方法采用传引用的方法;
所述远程完成模块用于远程通信线程执行完毕,远程通信线程结束,活跃节点从远程端转移到本地端;
所述本地恢复模块用于本地端恢复获得活跃节点,判断当前通信是否完成,如果是,关闭连接,清除无效连接对象;否则,远程端调用远程方法;
所述方法调用模块中的调用远程方法采用传引用系统,所述传引用系统包括调用模块、判断模块、对象封装模块、解析模块、调用判断模块和结果模块;
所述调用模块用于本地端在发起对远程端的远程过程调用时,先在本地端检查方法中的所有参数;
所述判断模块用于判断参数中是否包括引用对象,如果是,本地端将此参数发布为远程对象;否则,直接触发对象封装模块;
所述对象封装模块用于将此调用封装为请求对象和响应对象,并发送到远程端进行处理;
所述解析模块用于远程端接收到请求对象并解析,扫描远程引用参数,并将其中作为引用传输的参数用相应的远程对象代替;远程端继续按照正常的过程执行来自本地端的方法调用;
所述调用判断模块用于远程端完成方法调用之后,搜集结果并判断结果是否为远程对象;如果是,远程端将此结果发布为远程对象;否则,触发结果模块;
所述结果模块用于将此结果打包为结果对象,设置好与请求对象对应的编号,发送到本地端。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院信息工程研究所,未经中国科学院信息工程研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410438611.4/1.html,转载请声明来源钻瓜专利网。