一种基于corba接口方法自适应调用方法

文档序号:7719411阅读:174来源:国知局
专利名称:一种基于corba接口方法自适应调用方法
技术领域
本发明涉及一种基于C0RBA接口方法自适应调用方法。
背景技术
使用符合CORBA标准的分布对象中间件开发应用可以有效地屏蔽底层通信,将精 力主要放在业务逻辑上,提高了生产效率。而且分布对象中间件一般都是稳定的产品,为用 户屏蔽了很多复杂的并发通信逻辑,也提高了应用的稳定性。 但是,在不稳定、有误码的网络上,如果接口中包含了数据量大的数据结构,则很 难调用成功,导致系统无法正常工作。

发明内容
本发明的目的就是针对上述的不足,提供了一种把接口方法名及参数打包成二进 制的序列、利用传输切片技术、将二进制序列分片发送到服务端,能保证传输的新型的基于 C0RBA接口方法自适应调用方法。 —种基于C0RBA接口方法自适应调用方法,包括客户端和服务端,包括如下步骤 1)客户端将方法标识及输入参数转换成二进制序列,并连接服务端建立会话; 2)客户端利用远程网络自适应传输到服务端,即动态调整发送尺寸大小; 3)服务端将二进制序列转换成方法标识及输入参数; 4)服务端本地方法调用,产生输出参数; 5)服务端将方法标识及输出参数转换成二进制序列; 6)客户端从服务端自适应网络读取二进制序列,即动态调整读取尺寸大小; 7)客户端结束会话,将二进制序列转换成方法标识和输出参数,返回给函数。即完
成了自适应调用,完成了接口方法和序列的相互转换,保证了传输。
上述步骤1)将接口方法转换为序列,具体是这样实现的 1-1)客户端将输入参数依序转换成CORBA: :Any,写入CORBA: :Any的序列; 1-2)客户端将CORBA: :Any的序列和方法名写入结构FuncParamln ; 1-3)客户端将结构FuncParamln转换成CORBA: :Any,再转换成二进制序列; 1-4)客户端调用BeginSession函数从服务端获取 一 个唯 一 标识会话的
SessionID。 将接口方法转换为二进制序列,主要是为了在传输的时候做分片和续传。本方法
的优点在于转换时最大程度保留了原有的数据特性,而且具有普遍的适用性,简单易行。使
用BeginSession建立会话,是为了支持并发,即当多个客户端同时访问一个服务端的时
候,每个客户端都能通过SessionID标识自己的会话,服务端也会通过SessionID标识会话
及其数据缓冲区,实现同时支持多个客户端的访问。 上述步骤2)是这样实现的 2-1)客户端将0赋给Pos,配置的长度赋给len ;
2-2)如果Pos大于二进制序列的长度则转步骤6); 2-3)客户端从二进制序列中的指定位置Pos取长度len的数据; 2-4)客户端调用SendData方法将数据发送到服务端,如果Pos+len等于二进制序
列的长度,则SendData函数的is_0Ver参数为true,通知服务端输入参数的二进制序列传
输完成,否则为false ; 2-5)服务端接收到数据后,根据SessionID,将接收的数据放到会话的输入缓冲 区,如果服务端接收到的is_0Ver参数为true,则转到步骤3); 2-6)如果步骤2-4)失败,检查是否是网络产生的原因,如果不是,报错退出;如果 是,否则就将len减为八分之一,Pos = Pos+len,返回步骤2_2); 2-7)步骤2-4)如果成功,检查是否完成发送,完成转步骤6),否则检查调用的时 间是否小于最小调长时间,如果是,len增大一倍;否则,判断调用时间是否大于最大调短 时间,如果是,则len减少一半,Pos = Pos+len,返回步骤2-3)。 进一步的,上述步骤2-6)中如果步骤2-4)失败,检查是否是网络产生的原因,如
果是,就将len减为八分之一,此时,如果len的八分之一小于最小包长度,则len的值设为
最小包长度;步骤2-7)中检查调用的时间是否小于最小调长时间,如果是,len增大一倍,
此时,如果len的二倍大于最大包长度,则len的值设定为最大包长度。 以上实现可以根据网络带宽,自动调整数据包的大小,找出最适应使用的网络情
况的包长度。采用根据调用的时间限定来改变包长度可以将每次调用的时间控制在一定的
范围内,从而实现带宽利用率和等待访问时间之间的平衡,其中最小调长时间和最大调短
时间是根据长期分布计算的经验得出的。设置最小包长度和最大包长度是为了应对IP包
过滤技术。 上述步骤3)是这样实现的 3-1)服务端根据SessionID从会话缓冲区中取出二进制序列,将二进制序列转换 成C0RBA::Any ; 3-2)再将C0RBA: :Any转换成结构FuncParamln ; 3-3)服务端根据结构FuncParamln中的方法标识,将其中的C0RBA: :Any序列逐个
转换成输入参数。 采用上述的转换方法具有普遍的适用性,简单实用。根据SessionID管理缓冲区, 支持客户端并发调用。 上述步骤4)是这样实现的服务端将转换出来的输入参数作为输入参数,定义输
出参数,调用与FuncParamln中指定的方法名一致的本地的方法,得到输出参数。 上述步骤5)是这样实现的服务端将输出参数依序转换成C0RBA: :Any,写入
C0RBA: :Any的序列;再将C0RBA: :Any的序列和方法名写入结构FuncParam0ut ;然后将
返回值转换成C0RBA: : Any ,写入结构FuncParam0ut ;然后将结构FuncParam0ut转换成
C0RBA: :Any,再转换成二进制序列;最后将二进制序列放入会话的输出缓冲区,等待客户端读取。 输出参数及返回值转换成二进制序列也是为了分片和续传。本转换方法具有普遍
的适用性,简单实用。
上述步骤6)是这样实现的
6-1)客户端将0赋给Pos ; 6-2)客户端调用SetOutDataLen设置每次输出数据的长度为len(为发送时使用 的长度),如果客户端不设置,服务端使用缺省值; 6-3)客户端调用GetOutData函数访问服务端,服务端根据SessionID从会话的输 出缓冲区的二进制序列的Pos位置取长度为len的数据返回,如果Pos+len等于输出缓冲 区的二进制序列的长度,则Get0utData的data_is_over参数输出为true,否则为false ;
6-4)如果步骤6-3)失败,检查是否是网络产生的原因,如果是,就将len减为八分 之一,然后转6-3);否则报错退出; 6-5)步骤6-3)如果成功,检查data_is_over是否为true,为true为完成转步骤 7),否则检查调用的时间是否小于最小调长时间,如果是,len增大一倍,否则,判断调用时 间是否大于最大调短时间,如果是,则len减少一半,SetOutDataLen设置每次输出数据的 长度为len,调用Pos = Pos+len,返回步骤6-3)。 进一步的,步骤6-4)中如果步骤6-3)失败,检查是否是网络产生的原因,如果是, 就将len减为八分之一,此时,如果len的八分之一小于最小包长度,则len的值设为最小 包长度;步骤6-5)中检查调用的时间是否小于最小调长时间,如果是,len增大一倍,此时, 如果len的八分之一小于最小包长度,则len的值设为最小包长度;而步骤6_5)中判断调 用时间是否大于最大调短时间,如果是,则len减少一半,此时,如果len的一半小于最小包 长度,则len的值设为最小包长度。
同步骤2) —样,实现输出数据的自适应传输。 上述步骤7)是这样实现的客户端将读取的二进制序列转换成C0RBA: :Any ;再 将C0RBA: :Any转换成结构FuncParam0ut ;然后根据结构FuncParam0ut中的方法标识,将 其中的C0RBA: :Any序列逐个转换成输出参数,将返回值CORBA: :Any转换成返回值;再调用 EndSession,服务端将会话的相关缓冲区释放;最后将输出参数、返回值返回给用户。
保持返回值的一致性,使客户不需要修改外层应用就可以方便地享受新调用方式 带来的优点。 本发明提供的基于C0RBA接口方法自适应调用方法,具有如下优点
1.使得C0RBA技术可以延伸到状况更差的网络。 虽然光纤技术、局域网技术和宽带技术的发展使得网络环境得到了很大的改善, 但是为适应移动计算环境,还是必须考虑低速率、高误码、稳定性差的无线网络环境。基于 CORBA接口方法自适应调用技术使得CORBA技术可以延伸到状况更差的网络,这在各种应
用向移动计算转移的今天具有重大意义。
2.维持原有的接口业务逻辑不变。 本方法只是对原有的接口进行了新的一层封装,没有改变原有的业务逻辑,这就
意味着可以保留原有的客户端和服务端不变,复用了原有的业务设计,减少了因环境改变
带来的新的开发量。 3. 二进制传输可以扩展加密。 把接口变成二进制传输可以扩展解密,保证数据的安全性。


图1为本发明实施例的总序列流程图;
图2是本发明实施例中客户端处理流程分段图一 ;
图3是本发明实施例中客户端处理流程分段图二 ;
图4是服务端SendData方法处理流程图。
具体实施例方式
下面以非限定性的实施方式进一步解释、说明本技术方案。 图1是一种基于CORBA接口方法自适应调用方法的序列流程图,图1中左侧部分
为用户函数,右侧部分的处理过程是在服务端完成的,而中间部分的处理过程是在客户端
完成的。客户端流程显示了一个完整的利用本技术进行远程CORBA调用的流程,服务流程
则是在初始化后满足客户请求服务的并发处理流程和用户函数的业务处理流程。 首先对客户端和服务端进行初始化,这与本发明的实质无关,且是本领域普通技
术人员熟知的。 在初始化完成后,本发明首先开始于客户端,即在步骤101,客户端将方法标识及 输入参数转换成二进制序列,并连接服务端建立会话。服务端会相应的建立会话缓冲区。
然后在步骤102,客户端利用远程网络自适应传输到服务端,即动态调整发送尺寸 大小以适应网络实际情况的方式传输。 然后进入服务端流程,在步骤103,服务端将二进制序列转换成方法标识及输入参数。
在步骤104,服务端本地方法调用,产生输出参数。 在步骤105,服务端将方法标识及输出参数转换成二进制序列,返回客户端。
然后在客户端,在步骤106,客户端从服务端自适应网络读取二进制序列,即动态 调整读取尺寸大小。 在步骤107,客户端结束会话,将二进制序列转换成方法标识和输出参数,返回给 函数。即完成了自适应调用,完成了接口方法和序列的相互转换,返回用户方法调用结果。
图2、图3是从客户端的角度是步骤101、 102、 (103、 104、 105) 、 106、 107的实现流 程图,其中步骤103、104、105在服务端完成,但由客户端触发。 首先开始于客户端,在步骤201,客户端将输出参数依序换成CORBA: :Any,写入 CORBA: :Any的序列,然后进行到步骤202。在步骤202,客户端将CORBA: :Any的序列和方法名写入结构FuncParamln。
然后在步骤203,客户端将结构FuncParamln转换成CORBA: :Any,再在步骤204转 换成二进制序列。 然后在步骤205,客户端调用BeginSession函数从服务端获取一个唯一标识会话 的SessionID。 上述将接口方法转换为了二进制序列,为下面传输做准备。
以下实现步骤102 : 步骤206,客户端将0赋给Pos,配置的长度赋给len。 步骤207,判断Pos大于二进制序列的长度,即数据传输完成,则进入点C,转入步 骤106,如果否,则进入步骤208。
步骤208,判断Pos+len是否大于二进制序列的长度,如果不是,到步骤209 ;如果 是到步骤210。 步骤209 , i s_over设为fal se ,转步骤211。
步骤210, is_over设为true。 步骤211,客户端从二进制序列中的指定位置Pos取长度len的数据(不足len则 全取剩下的),调用SendData发送。 步骤212,发送失败吗?如果失败转步骤213,否则转步骤216 ; 步骤213,是网络原因引起的异常吗?如果不是,抛出异常,报错,退出本流程;如
果是,继续。 步骤214, len达到0最小值且连续三次失败吗?是则,抛出异常,报错,退出本流 程;如果不是,继续。 步骤215, len取原有长度的八分之一,转步骤220 ;
步骤216, Pos = Pos+len,即准备取下一个发送块; 步骤217,本次传输时间小于最短增大时间吗?(速率一定,传输数据块小,则传 输时间短)是,则转步骤222,否则继续。 步骤218,本次传输时间大于最长减短时间吗?不是,表明当前长度传输数据合 适,不需改变,转步骤207 ;是,继续; 步骤219, len = len/2,发送长度取原来的一半; 步骤220,发送长度len小于1或者设置的最小发送长度吗?不是,则表明为一个 可信的长度,转步骤207,按len发送数据;是则,继续。 步骤221,设置1或者最小发送长度为发送长度,即len = 1或者最小发送长度,转 步骤207。 步骤222, len = 2*len,发送长度增大一倍; 步骤223, len大于最大长度吗?如果不大于,转步骤207,否则,继续。
步骤224, len取最大长度,即len =最大长度。转步骤207。
以上说明了自适应线路传输输入参数的实现方法。 客户端调用了 SendData方法,服务端按照图4的流程处理。SendData方法的服务 端处理流程分为两条, 一条为is_0Ver为false的处理流程,只是简单地将数据加入到会话 的输入缓冲区;一条为is_0Ver为true的处理流程,具体实现步骤103, 104, 105。说明如 下 步骤401,根据服务端给出的sessionid从数据缓冲区取会话的输入缓冲区的数 据。 步骤402, is_over为false吗?如果是,转步骤408,否则,继续。 步骤403,将接收数据转换成C0RBA: : Any,再转换成FuncParamIn。 步骤404,将根据方法名将FuncParamIn中的输入C0RBA: :Any序列转换成输入参数。 步骤405,将根据方法名调用实际的实现方法执行,并返回输出参数和返回值。
步骤406,将输出参数依序转换成C0RBA: :Any,写入C0RBA: :Any序列,并把方法 名、C0RBA: :Any序列返回值写入FuncParam0ut。
8
步骤407,将FuncParamOut转换成CORBA: :Any,再转换成二进制序列写入会话的输出数据缓冲区。SendData方法返回。 步骤408,将接收到的数据加入到输入缓冲区,SendData方法返回。其中,步骤403、步骤404实现步骤103,步骤405实现步骤104,步骤406、步骤407
实现步骤105。 客户端调用了 is—over为true的SendData方法后,转入步骤106取输出数据,接图3中的C点继续。说明如下 步骤301, Pos = O,从第个位置开始取数据。 步骤302,调用服务端的SetOutDataLen函数设置每次输出数据长度为len。因为每次去数据都由服务端给出一个长度的数据,所以要告诉服务端适合当前网络情况的数据长度。 步骤303,调用服务端的GetOutData函数从Pos位取长度为Len的数据取输出数据。 步骤304, GetOutData函数执行成功吗?如果执行成功,转步骤308 ;如果执行失败,继续。 步骤305,失败是因为网络原因吗?不是,抛出异常,结束;是,继续。 步骤306, len为O或者设置的下限值吗且连续三次失败吗?是,则抛出异常,结
束;不是,继续。 步骤307, len = len/8,输出长度取原来的八分之一,转步骤314。 步骤308, is—over为true吗?是,表明输出数据已取完,转319,进入步骤107 ;否
则,继续。 步骤309,取得的数据放入本地输出缓冲区。
步骤310, Pos = Pos+len,准备取下一段输出数据。 步骤311,传输时间小于最短增大时间吗?是,则表明使用的传输长度太短,需要增大,转步骤316;不是,继续。 步骤312,传输时间大于最长减短时间吗?不是,表明使用的传输长度合适,无需改变,转步骤303 ;是,则表明使用的传输长度太长,需要减短,继续。
步骤313, len = len/2,输出长度取原来的二分之一。 步骤314,len小于l或者最小长度吗?检查len的合法性。不是,即长度合法,转302;是,即长度不合法,继续。 步骤315,将len设置为1或者最小长度。转步骤302。
步骤316, len = len*2,输出长度取原来的二倍。 步骤317, Len大于最大长度吗?检查len的合法性。不是,即长度合法,转302 ;是,即长度不合法,继续。 步骤318,将len设置为最大长度。转步骤302。 步骤319,将本地输出缓冲区的二进制流转换为CORBA:Any,再转换为F皿cPar咖Out 。 步骤320,将FuncParamOut中的输出依次转换为调用函数的输出参数。
步骤321, FuncParamOut中的返回值转换调用函数的返回值。
步骤322,调用服务端EndSession清除服务端会话数据。客户端用户函数正常调用结束。 本流程中,步骤301到步骤318实现了步骤106,步骤319到步骤322实现了步骤107。
权利要求
一种基于CORBA接口方法自适应调用方法,包括客户端和服务端,其特征在于包括如下步骤1)客户端将方溶标识及输入参数转换成二进制序列,并连接服务端建立会话;2)客户端利用远程网络自适应传输到服务端,即动态调整发送尺寸大小;3)服务端将二进制序列转换成方法标识及输入参数;4)服务端本地方法调用,产生输出参数;5)服务端将方法标识及输出参数转换成二进制序列;6)客户端从服务端自适应网络读取二进制序列,即动态调整读取尺寸大小;7)客户端结束会话,将二进制序列转换成方法标识和输出参数,返回给函数。
2. 根据权利要求1所述的基于CORBA接口方法自适应调用方法,其特征在于上述步 骤1)是这样实现的1-1)客户端将输入参数依序转换成CORBA: :Any,写入CORBA: :Any的序列;1-2)客户端将CORBA: :Any的序列和方法名写入结构FuncParamln ;1-3)客户端将结构FuncParamln转换成CORBA: : Any,再转换成二进制序列;1- 4)客户端调用BeginSession函数从服务端获取一个唯一标识会话的SessionID。
3. 根据权利要求1所述的基于CORBA接口方法自适应调用方法,其特征在于上述步 骤2)是这样实现的2- 1)客户端将0赋给Pos,配置的长度赋给len ; 2-2)如果Pos大于二进制序列的长度则转;2-3)客户端从二进制序列中的指定位置Pos取长度len的数据;2-4)客户端调用SendData方法将数据发送到服务端,如果Pos+len等于二进制序列的 长度,则SendData函数的is_0Ver参数为true,通知服务端输入参数的二进制序列传输完 成,否则为false ;2-5)服务端接收到数据后,根据SessionID,将接收的数据放到会话的输入缓冲区,如 果服务端接收到的is_0Ver参数为true,则转到步骤3);2-6)如果步骤2-4)失败,检查是否是网络产生的原因,如果是,就将len减为八分之 一,否则报错退出;2- 7)步骤2-4)如果成功,检查是否完成发送,完成转步骤6),否则检查调用的时间是 否小于最小调长时间,如果是,len增大一倍;否则,判断调用时间是否大于最大调短时间, 如果是,则len减少一半,Pos = Pos+len,返回步骤2-3)。
4. 根据权利要求3所述的基于C0RBA接口方法自适应调用方法,其特征在于上述步 骤2-6)中如果步骤2-4)失败,检查是否是网络产生的原因,如果是,就将len减为八分之 一,此时,如果len的八分之一小于最小包长度,则len的值设为最小包长度;步骤2_7)中 检查调用的时间是否小于最小调长时间,如果是,len增大一倍,此时,如果len的二倍大于 最大包长度,则len的值设定为最大包长度。
5. 根据权利要求1所述的基于CORBA接口方法自适应调用方法,其特征在于上述步 骤3)是这样实现的3- 1)服务端根据SessionID从会话缓冲区中取出二进制序列,将二进制序列转换成 CORBA::Any ;3-2)再将C0RBA: :Any转换成结构FuncParamln ;3-3)服务端根据结构FuncParamln中的方法标识,将其中的C0RBA: : Any序列逐个转换 成输入参数。
6. 根据权利要求1所述的基于CORBA接口方法自适应调用方法,其特征在于上述步 骤4)是这样实现的服务端将转换出来的输入参数作为输入参数,定义输出参数,调用与 FuncParamln中指定的方法名一致的本地的方法,得到输出参数。
7. 根据权利要求1所述的基于CORBA接口方法自适应调用方法,其特征在于上述 步骤5)是这样实现的服务端将输出参数依序转换成CORBA: :Any,写入CORBA: :Any的 序列;再将CORBA: :Any的序列和方法名写入结构FuncParamOut ;然后将返回值转换成 CORBA: :Any,写入结构FuncParamOut ;然后将结构FuncParamOut转换成CORBA: :Any,再转 换成二进制序列;最后将二进制序列放入会话的输出缓冲区,等待客户端读取。
8. 根据权利要求1所述的基于CORBA接口方法自适应调用方法,其特征在于上述步 骤6)是这样实现的6-1)客户端将O赋给Pos ;6-2)客户端调用SetOutDataLen设置每次输出数据的长度为len(为发送时使用的长 度),如果客户端不设置,服务端使用缺省值;6-3)客户端调用GetOutData函数访问服务端,服务端根据SessionID从会话的输出缓 冲区的二进制序列的Pos位置取长度为len的数据返回,如果Pos+len等于输出缓冲区的 二进制序列的长度,则GetOutData的data_is_over参数输出为true,否则为false ;6-4)如果步骤6-3)失败,检查是否是网络产生的原因,如果是,就将len减为八分之 一,然后转6-3);否则报错退出;6-5)步骤6-3)如果成功,检查data_is_over是否为true,为true为完成转步骤7), 否则检查调用的时间是否小于最小调长时间,如果是,len增大一倍,否则,判断调用时间是 否大于最大调短时间,如果是,则len减少一半,SetOutDataLen设置每次输出数据的长度 为len,调用Pos = Pos+len,返回步骤6-3)。
9. 根据权利要求8所述的基于C0RBA接口方法自适应调用方法,其特征在于步骤 6-4)中如果步骤6-3)失败,检查是否是网络产生的原因,如果是,就将len减为八分之一, 此时,如果len的八分之一小于最小包长度,则len的值设为最小包长度;步骤6_5)中检查 调用的时间是否小于最小调长时间,如果是,len增大一倍,此时,如果len的八分之一小于 最小包长度,则len的值设为最小包长度;而步骤6-5)中判断调用时间是否大于最大调短 时间,如果是,则len减少一半,此时,如果len的一半小于最小包长度,则len的值设为最 小包长度。
10. 根据权利要求1所述的基于CORBA接口方法自适应调用方法,其特征在于上述步 骤7)是这样实现的客户端将读取的二进制序列转换成CORBA: :Any ;再将CORBA: :Any转 换成结构FuncParamOut ;然后根据结构FuncParamOut中的方法标识,将其中的CORBA: :Any 序列逐个转换成输出参数,将返回值CORBA: :Any转换成返回值;再调用EndSession,服务 端将会话的相关缓冲区释放;最后将输出参数、返回值返回给用户。
全文摘要
本发明是一种基于CORBA接口方法自适应调用方法,把接口方法名及参数打包成二进制的序列,利用传输切片技术,将二进制序列分片发送到服务端,在服务端将二进制序列转换成接口名和参数,调用服务端的接口方法,再将输出参数转换成二进制序列传输到客户端。具有如下优点1.使得CORBA技术可以延伸到状况更差的网络。2.维持原有的接口业务逻辑不变。3.二进制传输可以扩展加密。
文档编号H04L29/06GK101702719SQ20091022962
公开日2010年5月5日 申请日期2009年10月28日 优先权日2009年10月28日
发明者罗端红, 郭长国 申请人:山东中创软件商用中间件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1