一种基于长连接的双向调用方法及系统的制作方法_2

文档序号:9527599阅读:来源:国知局
行步骤g;否则,执行步骤h;
[0047] 步骤g:远程端将此结果发布为远程对象;
[0048] 步骤h:将此结果打包为结果对象,设置好与请求对象对于的编号,发送到客户 端。
[0049] 采用上述进一步方案的有益效果是,采用远程对象的方式来表示对一个对象的引 用,结果是需要以引用传输的地方,就会传输过去相应的远程对象,最终在引用上的操作, 都会通过这一套远程对象方法调用机制重新作用在原对象上。
[0050] 进一步,所述步骤1中远程端作为连接的接收者在连接之前已经处在监听状态。
[0051] 采用上述进一步方案的有益效果是,远程端处于监听状态,等待连接请求,保证本 地端发送请求,远程端就能及时接收。
[0052] 进一步,所述步骤9中连接一旦关闭,该连接对象上将不能再传输任何信息,在它 上面做的任何读写操作都将抛出异常,该异常将会沿着序列化组件对象传递给上层的使用 者。
[0053] 进一步,所述本地端以UTF8编码的方式将字符串发送到远程端;远程端以UTF8编 码的方式读取字符串,提取其中每一个元素。
[0054] 本发明所要解决的技术问题是,提供一种适用于不局限于局域网的基于长连接的 双向调用系统。
[0055] 本发明解决上述技术问题的技术方案如下:一种基于长连接的双向调用系统,包 括连接请求模块、连接建立模块、方法调用模块、远程完成模块和本地恢复模块;
[0056] 所述连接请求模块用于本地端作为连接的发起者,多个远程端作为连接的接收 者,本地端分别发起连接请求到多个远程端;
[0057] 所述连接建立模块用于控制每个远程端接收一个连接请求,本地端和每个远程端 都相应的获得一个进行传输字节流的连接对象,本地端和远程端建立连接;本地端与远程 端协商确定一个序列化协议,并使用该协议包装字节流连接,从而提供一个对象传输的通 道;
[0058] 所述方法调用模块用于远程端将序列化的连接对象发送到本地端,本地端执行通 信线程,通信线程内包含栈,当通信线程执行本地代码,通信线程内栈的栈定节点成为活跃 节点;所述方法调用模块用于调用远程方法,通信线程执行远程代码,远程端出现远程通信 线程,活跃节点转移到远程端,本地端进入暂停状态;
[0059] 所述远程完成模块用于远程通信线程执行完毕,远程通信线程结束,活跃节点从 远程端转移到本地端;
[0060] 所述本地恢复模块用于本地端恢复获得活跃节点,判断当前通信是否完成,如果 是,关闭连接,清除无效连接对象;否则,远程端调用远程方法。
[0061] 本发明的有益效果是:本发明通信双方都可以互相调用对方提供的远程对象服 务,不会受局域网的限制;提供一种类似于本地方法调用的方法调用方式,将远程对象的提 供过程设计成参数传递中的传引用方式。
[0062] 在上述技术方案的基础上,本发明还可以做如下改进。
[0063] 进一步,所述远程线程模块中的调用远程方法采用传引用系统,所述传引用系统 包括调用模块、判断模块、对象封装模块、解析模块、调用判断模块和结果模块;
[0064] 所述调用模块用于本地端在发起对远程端的远程过程调用时,先在本地端检查方 法中的所有参数;
[0065] 所述判断模块用于判断参数中是否包括引用对象,如果是,本地端将此参数发布 为远程对象;否则,直接触发对象封装模块;
[0066] 所述对象封装模块用于将此调用封装为请求对象和响应对象,并发送到远程端进 行处理;
[0067] 所述解析模块用于远程端接收到请求对象并解析,扫描远程引用参数,并将其中 作为引用传输的参数用相应的远程对象代替;远程端继续按照正常的过程执行来自本地端 的方法调用;
[0068] 所述调用判断模块用于远程端完成方法调用之后,搜集结果并判断结果是否为远 程对象;如果是,远程端将此结果发布为远程对象;否则,触发结果模块;
[0069] 所述结果模块用于将此结果打包为结果对象,设置好与请求对象对于的编号,发 送到客户端。
【附图说明】
[0070] 图1为本发明所述的一种基于长连接的双向调用方法流程图;
[0071]图2为本发明所述的一种基于长连接的双向调用方法中关闭连接的方法;
[0072] 图3为本发明中传引用的方法流程图;
[0073]图4为本发明所述的一种基于长连接的双向调用系统结构框图;
[0074] 图5为本发明中传引用的系统结构框图;
[0075] 图6为本发明所述的方法调用过程示意图;
[0076] 图7为本发明所述远程对象方法调用中的线程转移模型;
[0077] 图8为本发明所述参数与返回值中的传引用实现流程图;
[0078] 图9为本发明所述的远程对象清除流程图;
[0079] 图10为本发明所述RPC组件的全部过程流程图。
[0080] 附图中,各标号所代表的部件列表如下:
[0081] 1、连接请求模块,2、连接建立模块,3、方法调用模块,4、远程完成模块,5、本地恢 复模块,6、调用模块,7、判断模块,8、对象封装模块,9、解析模块,10、调用判断模块,11、结 果模块。
【具体实施方式】
[0082] 以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并 非用于限定本发明的范围。
[0083] 如图1所示,本发明所述的一种基于长连接的双向调用方法,具体包括以下步骤:
[0084] 步骤1 :本地端作为连接的发起者,多个远程端作为连接的接收者,本地端分别发 起连接请求到多个远程端;
[0085] 步骤2 :远程端接收连接请求和字符串,提取其中每一个元素;
[0086] 步骤3 :选取一个元素进行检查,判断远程端是否支持,如果是,执行步骤5,否则, 执行步骤4 ;
[0087] 步骤4 :判断是否还有元素未进行检查,如果是,执行步骤3 ;否则,远程端向本地 端返回连接失败信息,结束;
[0088] 步骤5 :本地端与远程端协商确定一个序列化协议,并使用该协议包装字节流连 接,从而提供一个对象传输的通道;
[0089] 步骤6 :远程端将序列化的连接对象发送到本地端,本地端执行通信线程,通信线 程内包含栈,当通信线程执行本地代码,通信线程内栈的栈定节点成为活跃节点;
[0090] 步骤7 :调用远程方法,通信线程执行远程代码,远程端出现远程通信线程,活跃 节点转移到远程端,本地端进入暂停状态;
[0091] 步骤8 :远程通信线程执行完毕,远程通信线程结束,活跃节点从远程端转移到本 地端;
[0092]步骤9 :本地端恢复获得活跃节点,判断当前通信是否完成,如果是,执行步骤10 ; 否则,执行步骤7;
[0093] 步骤10 :判断连接是否还存在于远程端,如果是,执行步骤6 ;否则,执行步骤11 ;
[0094] 步骤11 :关闭连接,清除无效连接对象。
[0095] 如图2所示,为本发明所述的一种基于长连接的双向调用方法中关闭连接的方 法,具体包括以下步骤:
[0096] 步骤11. 1 :本地端的序列化组件对象向底层的连接对象发送一个关闭连接请求;
[0097] 步骤11. 2 :底层的连接对象收到关闭连接请求后,将关闭连接请求发送到远程的 连接对象,关闭连接;
[0098] 步骤11. 3 :本地端删除无效的序列化组件对象,远程端删除无效的连接对象。
[0099] 所述步骤1首先查询本地端所支持的序列化协议,并将这些协议的名字按照最期 望使用到最不期望使用的顺序排成一个序列,将该序列转换为元素逗号分隔的字符串,本 地端将字符串发送到远程端。
[0100] 如图3所示,为本发明中传引用的方法,所述步骤7中的调用远程方法采用传引用 的方法,传引用方法具体包括以下步骤:
[0101] 步骤a:本地端在发起对远程端的远程过程调用时,先在本地端检查方法中的所 有参数;
[0102] 步骤b:判断参数中是否包括引用对象,如果是,执行步骤c;否则,执行步骤d;
[0103] 步骤c:本地端将此参数发布为远程对象;
[0104] 步骤d:将此调用封装为请求对象和响应对象,并发送到远程端进行处理;
[0105] 步骤e:远程端接收到请求对象并解析,扫描远程引用参数,
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1