一种基于长连接的双向调用方法及系统技术方案

技术编号:12781829 阅读:59 留言:0更新日期:2016-01-28 00:53
本发明专利技术涉及一种基于长连接的双向调用方法及系统,其方法包括步骤1:本地端发起一个连接请求到远程端;步骤2:本地端和远程端建立连接;步骤3:对远程端连接对象进行序列化,并加载序列化组件对象;步骤4:本地端执行通信线程;步骤5:调用远程方法;步骤6:远程通信线程结束,活跃节点从远程端转移到本地端;步骤7:本地端恢复获得活跃节点,判断当前通信是否完成,如果是,执行步骤8;否则,执行步骤5;步骤8:判断连接是否还存在于远程端,如果是,执行步骤4;否则,执行步骤9;步骤9:关闭连接,清除无效连接对象。本发明专利技术通信双方都可以互相调用对方提供的远程对象服务,不会受局域网的限制。

【技术实现步骤摘要】

本专利技术涉及一种基于长连接的双向调用方法及系统,属于网络与信息安全技术领 域。
技术介绍
远程过程调用(RemoteProcedureCall,RPC),是一种计算机通信协议,使用非常 广泛。RPC使得一台计算机中运行的程序可以直接调用另一台计算机的子程序。远程过程 调用是一个分布式计算的客户端一一服务器(CS)的模型。客户端可以向服务器发送一些 请求,并提供一定的参数,服务器执行特定的过程之后,将执行结果返回的客户端。 经过长时间的发展,RPC已经有比较多的实现: 1)SunRPC机制的实现是建立在UNIX4. 2BSDSOCKET和TCP、UDP协议的基 础上,通过一组例程库实现。RPCLibrary包括RPCroutines和XDR(ExternalData Representation)库函数,其中XDR库是一个C函数的集合,是SUN制定的数据表示标准。 Java中普通的RPC方法只能传送由XDR定义的数据类型,不能传送对象。 2)DCERPC机制是从Apollo的网络计算系统(NetworkComputingSystem)发展 而来。该机制是用接口(interface)机制来协调客户端向服务器的远程过程调用。每个接 口包括用接口定义语言(InterfaceDefinitionLanguage)来描述远程调用的一个或多个 过程,以及相应的参数。 3)JavaRMI机制,是纯Java的远程方法调用,主要功能就是提供客户端程序调用 位于远程服务器上对象所提供的方法,这样可将部分逻辑处理放在远端服务器上。Java RMI是面向对象的RPC。RMI对象时绑定在本地的,只有远程方法参数和返回值是通过网络 传输的。 由于JavaRMI应该很广泛,也能代表现有的较多的RPC,因此在此对其技术细节 进行分析,并指出现有RPC的一些缺陷,最后提出新的解决方案。 RMI中有两种特殊类型的对象,称为客户端存根和服务器端框架,这些是RMI的第 一层,也是基础层。客户端存根的作用是作为远程服务器的代理,是客户对象;而服务器端 框架则是从网路链接中读取客户端的调用参数,向远程服务实现对象进行调用,接受返回 值,然后通过链接返回到客户端存根。 远程引用层(RemoteReferenceLayer)则是负责专门的远程方法协议,这一层处 理底层远程方法调用连接的调用语义。RemoteReference提供RemoteRef对象,代表远程 对象的一个句柄,通过RemoteRef对象,可以执行远程对象方法调用。 传输层(TransportLayer),负责具体的客户端到服务器端的基于流的网络连接。 该层负责建立连接、对连接管理、监控连接状态、监听新的调用、维护远程对象表、定位远程 调用的调度程序等。 现有的RPC基本都是专注于客户端到服务器端的方法调用,也就是传统的CS结 构,因此服务器端也就必须要处于网络可发现状态,这样客户端才能连接上服务器。现有的 RPC都存在如下可改进的地方: 1)只能由客户端主动向服务器端进行远程过程调用,而不能支持服务器端到客户 端的远程过程调用; 2)仅支持网络全局对象的方法调用,而不支持针对远程局部对象的访问; 在实际分布式网络应用中,RPC使用很广泛。目前的RPC也能满足大部分的远程 过程调用需求,然而还存在一些场景,比如:服务器要主动推送数据到客户端,或是调用客 户端的一些对象的方法,或是在进行远程过程调用的时候,要将本地局部对象的引用作为 参数。在客户端与服务器端的过程调用比较多样、密集的时候,以上场景都常出现。因此非 常需要针对这些需求的RPC。
技术实现思路
在传统模式下,外网的应用不能直接调用内网应用提供的远程对象服务。该RPC 组件突破了这一限制,使得内网应用可以向外网应用提供一个远程对象,让外网应用能主 动向内网应用发送消息。 本专利技术所要解决的技术问题是,提供一种适用于不局限于局域网的基于长连接的 双向调用方法。 本专利技术解决上述技术问题的技术方案如下:一种基于长连接的双向调用方法,具 体包括以下步骤: 步骤1 :本地端作为连接的发起者,多个远程端作为连接的接收者,本地端分别发 起连接请求到多个远程端; 步骤2 :每个远程端接收一个连接请求,本地端和每个远程端都相应的获得一个 进行传输字节流的连接对象,本地端和远程端建立连接; 步骤3 :本地端与远程端协商确定一个序列化协议,并使用该协议包装字节流连 接,从而提供一个对象传输的通道; 步骤4 :远程端将序列化的连接对象发送到本地端,本地端执行通信线程,通信线 程内包含栈,当通信线程执行本地代码,通信线程内栈的栈定节点成为活跃节点; 步骤5 :调用远程方法,通信线程执行远程代码,远程端出现远程通信线程,活跃 节点转移到远程端,本地端进入暂停状态; 步骤6 :远程通信线程执行完毕,远程通信线程结束,活跃节点从远程端转移到本 地端; 步骤7 :本地端恢复获得活跃节点,判断当前通信是否完成,如果是,执行步骤8 ; 否则,执行步骤5; 步骤8 :判断连接是否还存在于远程端,如果是,执行步骤4 ;否则,执行步骤9 ; 步骤9 :关闭连接,清除无效连接对象。 本专利技术的有益效果是:本专利技术通信双方都可以互相调用对方提供的远程对象服 务,不会受局域网的限制;提供一种类似于本地方法调用的方法调用方式,将远程对象的提 供过程设计成参数传递中的传引用方式。 在上述技术方案的基础上,本专利技术还可以做如下改进。 进一步,所述连接是持久的,被多个远程对象共享;通信双方都可以在这个连接 上,为对方提供远程对象,实现"长链接"和"双向"的功能。 进一步,所述步骤9具体包括以下步骤: 步骤9. 1 :本地端的序列化组件对象向底层的连接对象发送一个关闭连接请求; 步骤9. 2:底层的连接对象收到关闭连接请求后,将关闭连接请求发送到远程的 连接对象,关闭连接; 步骤9. 3:本地端删除无效的序列化组件对象,远程端删除无效的连接对象。 进一步,所述步骤1首先查询本地端所支持的序列化协议,并将这些协议的名字 按照最期望使用到最不期望使用的顺序排成一个序列,将该序列转换为元素逗号分隔的字 符串,本地端将字符串发送到远程端。 进一步,所述步骤2具体包括以下步骤: 步骤2. 1 :远程端接收连接请求和字符串,提取其中每一个元素; 步骤2. 2:选取一个元素进行检查,判断远程端是否支持,如果是,执行步骤2. 4, 否则,执行步骤2. 3; 步骤2.3 :判断是否还有元素未进行检查,如果是,执行步骤2.2 ;否则,远程端向 本地端返回连接失败信息,结束; 步骤2. 4:本地端和远程端建立连接,远程端向本地端发布远程对象,本地端获得 对应远程对象的引用对象。 进一步,所述步骤5中的调用远程方法采用传引用的方法,传引用方法具体包括 以下步骤: 步骤a:本地端在发起对远程端的远程过程调用时,先在本地端检查方法中的所 有参数; 步骤b:判断参数中是否包括引用对象,如果是,执行步骤c;否则,执行步骤d; 步骤c:本地端将此参数发布为远程对象; 步骤d:将此调用封装为请求对象和响应对象,并发送到远程端进行处理; 步骤e:远程端接收到请求对象并解析,扫描远程引用参数,并将其中作为本文档来自技高网
...
一种基于长连接的双向调用方法及系统

【技术保护点】
一种基于长连接的双向调用方法,其特征在于,具体包括以下步骤:步骤1:本地端作为连接的发起者,多个远程端作为连接的接收者,本地端分别发起连接请求到多个远程端;步骤2:每个远程端接收一个连接请求,本地端和每个远程端都相应的获得一个进行传输字节流的连接对象,本地端和远程端建立连接;步骤3:本地端与远程端协商确定一个序列化协议,并使用该协议包装字节流连接,从而提供一个对象传输的通道;步骤4:远程端将序列化的连接对象发送到本地端,本地端执行通信线程,通信线程内包含栈,当通信线程执行本地代码,通信线程内栈的栈定节点成为活跃节点;步骤5:调用远程方法,通信线程执行远程代码,远程端出现远程通信线程,活跃节点转移到远程端,本地端进入暂停状态;步骤6:远程通信线程执行完毕,远程通信线程结束,活跃节点从远程端转移到本地端;步骤7:本地端恢复获得活跃节点,判断当前通信是否完成,如果是,执行步骤8;否则,执行步骤5;步骤8:判断连接是否还存在于远程端,如果是,执行步骤4;否则,执行步骤9;步骤9:关闭连接,清除无效连接对象。

【技术特征摘要】

【专利技术属性】
技术研发人员:宋子龙倪顺朱红松于楠孙利民
申请(专利权)人:中国科学院信息工程研究所
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1