国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于corba接口方法自適應(yīng)調(diào)用方法

      文檔序號(hào):7719411閱讀:212來源:國(guó)知局
      專利名稱:一種基于corba接口方法自適應(yīng)調(diào)用方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種基于C0RBA接口方法自適應(yīng)調(diào)用方法。
      背景技術(shù)
      使用符合CORBA標(biāo)準(zhǔn)的分布對(duì)象中間件開發(fā)應(yīng)用可以有效地屏蔽底層通信,將精 力主要放在業(yè)務(wù)邏輯上,提高了生產(chǎn)效率。而且分布對(duì)象中間件一般都是穩(wěn)定的產(chǎn)品,為用 戶屏蔽了很多復(fù)雜的并發(fā)通信邏輯,也提高了應(yīng)用的穩(wěn)定性。 但是,在不穩(wěn)定、有誤碼的網(wǎng)絡(luò)上,如果接口中包含了數(shù)據(jù)量大的數(shù)據(jù)結(jié)構(gòu),則很 難調(diào)用成功,導(dǎo)致系統(tǒng)無法正常工作。

      發(fā)明內(nèi)容
      本發(fā)明的目的就是針對(duì)上述的不足,提供了一種把接口方法名及參數(shù)打包成二進(jìn) 制的序列、利用傳輸切片技術(shù)、將二進(jìn)制序列分片發(fā)送到服務(wù)端,能保證傳輸?shù)男滦偷幕?C0RBA接口方法自適應(yīng)調(diào)用方法。 —種基于C0RBA接口方法自適應(yīng)調(diào)用方法,包括客戶端和服務(wù)端,包括如下步驟 1)客戶端將方法標(biāo)識(shí)及輸入?yún)?shù)轉(zhuǎn)換成二進(jìn)制序列,并連接服務(wù)端建立會(huì)話; 2)客戶端利用遠(yuǎn)程網(wǎng)絡(luò)自適應(yīng)傳輸?shù)椒?wù)端,即動(dòng)態(tài)調(diào)整發(fā)送尺寸大?。? 3)服務(wù)端將二進(jìn)制序列轉(zhuǎn)換成方法標(biāo)識(shí)及輸入?yún)?shù); 4)服務(wù)端本地方法調(diào)用,產(chǎn)生輸出參數(shù); 5)服務(wù)端將方法標(biāo)識(shí)及輸出參數(shù)轉(zhuǎn)換成二進(jìn)制序列; 6)客戶端從服務(wù)端自適應(yīng)網(wǎng)絡(luò)讀取二進(jìn)制序列,即動(dòng)態(tài)調(diào)整讀取尺寸大?。? 7)客戶端結(jié)束會(huì)話,將二進(jìn)制序列轉(zhuǎn)換成方法標(biāo)識(shí)和輸出參數(shù),返回給函數(shù)。即完
      成了自適應(yīng)調(diào)用,完成了接口方法和序列的相互轉(zhuǎn)換,保證了傳輸。
      上述步驟1)將接口方法轉(zhuǎn)換為序列,具體是這樣實(shí)現(xiàn)的 1-1)客戶端將輸入?yún)?shù)依序轉(zhuǎn)換成CORBA: :Any,寫入CORBA: :Any的序列; 1-2)客戶端將CORBA: :Any的序列和方法名寫入結(jié)構(gòu)FuncParamln ; 1-3)客戶端將結(jié)構(gòu)FuncParamln轉(zhuǎn)換成CORBA: :Any,再轉(zhuǎn)換成二進(jìn)制序列; 1-4)客戶端調(diào)用BeginSession函數(shù)從服務(wù)端獲取 一 個(gè)唯 一 標(biāo)識(shí)會(huì)話的
      SessionID。 將接口方法轉(zhuǎn)換為二進(jìn)制序列,主要是為了在傳輸?shù)臅r(shí)候做分片和續(xù)傳。本方法
      的優(yōu)點(diǎn)在于轉(zhuǎn)換時(shí)最大程度保留了原有的數(shù)據(jù)特性,而且具有普遍的適用性,簡(jiǎn)單易行。使
      用BeginSession建立會(huì)話,是為了支持并發(fā),即當(dāng)多個(gè)客戶端同時(shí)訪問一個(gè)服務(wù)端的時(shí)
      候,每個(gè)客戶端都能通過SessionID標(biāo)識(shí)自己的會(huì)話,服務(wù)端也會(huì)通過SessionID標(biāo)識(shí)會(huì)話
      及其數(shù)據(jù)緩沖區(qū),實(shí)現(xiàn)同時(shí)支持多個(gè)客戶端的訪問。 上述步驟2)是這樣實(shí)現(xiàn)的 2-1)客戶端將0賦給Pos,配置的長(zhǎng)度賦給len ;
      2-2)如果Pos大于二進(jìn)制序列的長(zhǎng)度則轉(zhuǎn)步驟6); 2-3)客戶端從二進(jìn)制序列中的指定位置Pos取長(zhǎng)度len的數(shù)據(jù); 2-4)客戶端調(diào)用SendData方法將數(shù)據(jù)發(fā)送到服務(wù)端,如果Pos+len等于二進(jìn)制序
      列的長(zhǎng)度,則SendData函數(shù)的is_0Ver參數(shù)為true,通知服務(wù)端輸入?yún)?shù)的二進(jìn)制序列傳
      輸完成,否則為false ; 2-5)服務(wù)端接收到數(shù)據(jù)后,根據(jù)SessionID,將接收的數(shù)據(jù)放到會(huì)話的輸入緩沖 區(qū),如果服務(wù)端接收到的is_0Ver參數(shù)為true,則轉(zhuǎn)到步驟3); 2-6)如果步驟2-4)失敗,檢查是否是網(wǎng)絡(luò)產(chǎn)生的原因,如果不是,報(bào)錯(cuò)退出;如果 是,否則就將len減為八分之一,Pos = Pos+len,返回步驟2_2); 2-7)步驟2-4)如果成功,檢查是否完成發(fā)送,完成轉(zhuǎn)步驟6),否則檢查調(diào)用的時(shí) 間是否小于最小調(diào)長(zhǎng)時(shí)間,如果是,len增大一倍;否則,判斷調(diào)用時(shí)間是否大于最大調(diào)短 時(shí)間,如果是,則len減少一半,Pos = Pos+len,返回步驟2-3)。 進(jìn)一步的,上述步驟2-6)中如果步驟2-4)失敗,檢查是否是網(wǎng)絡(luò)產(chǎn)生的原因,如
      果是,就將len減為八分之一,此時(shí),如果len的八分之一小于最小包長(zhǎng)度,則len的值設(shè)為
      最小包長(zhǎng)度;步驟2-7)中檢查調(diào)用的時(shí)間是否小于最小調(diào)長(zhǎng)時(shí)間,如果是,len增大一倍,
      此時(shí),如果len的二倍大于最大包長(zhǎng)度,則len的值設(shè)定為最大包長(zhǎng)度。 以上實(shí)現(xiàn)可以根據(jù)網(wǎng)絡(luò)帶寬,自動(dòng)調(diào)整數(shù)據(jù)包的大小,找出最適應(yīng)使用的網(wǎng)絡(luò)情
      況的包長(zhǎng)度。采用根據(jù)調(diào)用的時(shí)間限定來改變包長(zhǎng)度可以將每次調(diào)用的時(shí)間控制在一定的
      范圍內(nèi),從而實(shí)現(xiàn)帶寬利用率和等待訪問時(shí)間之間的平衡,其中最小調(diào)長(zhǎng)時(shí)間和最大調(diào)短
      時(shí)間是根據(jù)長(zhǎng)期分布計(jì)算的經(jīng)驗(yàn)得出的。設(shè)置最小包長(zhǎng)度和最大包長(zhǎng)度是為了應(yīng)對(duì)IP包
      過濾技術(shù)。 上述步驟3)是這樣實(shí)現(xiàn)的 3-1)服務(wù)端根據(jù)SessionID從會(huì)話緩沖區(qū)中取出二進(jìn)制序列,將二進(jìn)制序列轉(zhuǎn)換 成C0RBA::Any ; 3-2)再將C0RBA: :Any轉(zhuǎn)換成結(jié)構(gòu)FuncParamln ; 3-3)服務(wù)端根據(jù)結(jié)構(gòu)FuncParamln中的方法標(biāo)識(shí),將其中的C0RBA: :Any序列逐個(gè)
      轉(zhuǎn)換成輸入?yún)?shù)。 采用上述的轉(zhuǎn)換方法具有普遍的適用性,簡(jiǎn)單實(shí)用。根據(jù)SessionID管理緩沖區(qū), 支持客戶端并發(fā)調(diào)用。 上述步驟4)是這樣實(shí)現(xiàn)的服務(wù)端將轉(zhuǎn)換出來的輸入?yún)?shù)作為輸入?yún)?shù),定義輸
      出參數(shù),調(diào)用與FuncParamln中指定的方法名一致的本地的方法,得到輸出參數(shù)。 上述步驟5)是這樣實(shí)現(xiàn)的服務(wù)端將輸出參數(shù)依序轉(zhuǎn)換成C0RBA: :Any,寫入
      C0RBA: :Any的序列;再將C0RBA: :Any的序列和方法名寫入結(jié)構(gòu)FuncParam0ut ;然后將
      返回值轉(zhuǎn)換成C0RBA: : Any ,寫入結(jié)構(gòu)FuncParam0ut ;然后將結(jié)構(gòu)FuncParam0ut轉(zhuǎn)換成
      C0RBA: :Any,再轉(zhuǎn)換成二進(jìn)制序列;最后將二進(jìn)制序列放入會(huì)話的輸出緩沖區(qū),等待客戶端讀取。 輸出參數(shù)及返回值轉(zhuǎn)換成二進(jìn)制序列也是為了分片和續(xù)傳。本轉(zhuǎn)換方法具有普遍
      的適用性,簡(jiǎn)單實(shí)用。
      上述步驟6)是這樣實(shí)現(xiàn)的
      6-1)客戶端將0賦給Pos ; 6-2)客戶端調(diào)用SetOutDataLen設(shè)置每次輸出數(shù)據(jù)的長(zhǎng)度為len(為發(fā)送時(shí)使用 的長(zhǎng)度),如果客戶端不設(shè)置,服務(wù)端使用缺省值; 6-3)客戶端調(diào)用GetOutData函數(shù)訪問服務(wù)端,服務(wù)端根據(jù)SessionID從會(huì)話的輸 出緩沖區(qū)的二進(jìn)制序列的Pos位置取長(zhǎng)度為len的數(shù)據(jù)返回,如果Pos+len等于輸出緩沖 區(qū)的二進(jìn)制序列的長(zhǎng)度,則Get0utData的data_is_over參數(shù)輸出為true,否則為false ;
      6-4)如果步驟6-3)失敗,檢查是否是網(wǎng)絡(luò)產(chǎn)生的原因,如果是,就將len減為八分 之一,然后轉(zhuǎn)6-3);否則報(bào)錯(cuò)退出; 6-5)步驟6-3)如果成功,檢查data_is_over是否為true,為true為完成轉(zhuǎn)步驟 7),否則檢查調(diào)用的時(shí)間是否小于最小調(diào)長(zhǎng)時(shí)間,如果是,len增大一倍,否則,判斷調(diào)用時(shí) 間是否大于最大調(diào)短時(shí)間,如果是,則len減少一半,SetOutDataLen設(shè)置每次輸出數(shù)據(jù)的 長(zhǎng)度為len,調(diào)用Pos = Pos+len,返回步驟6-3)。 進(jìn)一步的,步驟6-4)中如果步驟6-3)失敗,檢查是否是網(wǎng)絡(luò)產(chǎn)生的原因,如果是, 就將len減為八分之一,此時(shí),如果len的八分之一小于最小包長(zhǎng)度,則len的值設(shè)為最小 包長(zhǎng)度;步驟6-5)中檢查調(diào)用的時(shí)間是否小于最小調(diào)長(zhǎng)時(shí)間,如果是,len增大一倍,此時(shí), 如果len的八分之一小于最小包長(zhǎng)度,則len的值設(shè)為最小包長(zhǎng)度;而步驟6_5)中判斷調(diào) 用時(shí)間是否大于最大調(diào)短時(shí)間,如果是,則len減少一半,此時(shí),如果len的一半小于最小包 長(zhǎng)度,則len的值設(shè)為最小包長(zhǎng)度。
      同步驟2) —樣,實(shí)現(xiàn)輸出數(shù)據(jù)的自適應(yīng)傳輸。 上述步驟7)是這樣實(shí)現(xiàn)的客戶端將讀取的二進(jìn)制序列轉(zhuǎn)換成C0RBA: :Any ;再 將C0RBA: :Any轉(zhuǎn)換成結(jié)構(gòu)FuncParam0ut ;然后根據(jù)結(jié)構(gòu)FuncParam0ut中的方法標(biāo)識(shí),將 其中的C0RBA: :Any序列逐個(gè)轉(zhuǎn)換成輸出參數(shù),將返回值CORBA: :Any轉(zhuǎn)換成返回值;再調(diào)用 EndSession,服務(wù)端將會(huì)話的相關(guān)緩沖區(qū)釋放;最后將輸出參數(shù)、返回值返回給用戶。
      保持返回值的一致性,使客戶不需要修改外層應(yīng)用就可以方便地享受新調(diào)用方式 帶來的優(yōu)點(diǎn)。 本發(fā)明提供的基于C0RBA接口方法自適應(yīng)調(diào)用方法,具有如下優(yōu)點(diǎn)
      1.使得C0RBA技術(shù)可以延伸到狀況更差的網(wǎng)絡(luò)。 雖然光纖技術(shù)、局域網(wǎng)技術(shù)和寬帶技術(shù)的發(fā)展使得網(wǎng)絡(luò)環(huán)境得到了很大的改善, 但是為適應(yīng)移動(dòng)計(jì)算環(huán)境,還是必須考慮低速率、高誤碼、穩(wěn)定性差的無線網(wǎng)絡(luò)環(huán)境。基于 CORBA接口方法自適應(yīng)調(diào)用技術(shù)使得CORBA技術(shù)可以延伸到狀況更差的網(wǎng)絡(luò),這在各種應(yīng)
      用向移動(dòng)計(jì)算轉(zhuǎn)移的今天具有重大意義。
      2.維持原有的接口業(yè)務(wù)邏輯不變。 本方法只是對(duì)原有的接口進(jìn)行了新的一層封裝,沒有改變?cè)械臉I(yè)務(wù)邏輯,這就
      意味著可以保留原有的客戶端和服務(wù)端不變,復(fù)用了原有的業(yè)務(wù)設(shè)計(jì),減少了因環(huán)境改變
      帶來的新的開發(fā)量。 3. 二進(jìn)制傳輸可以擴(kuò)展加密。 把接口變成二進(jìn)制傳輸可以擴(kuò)展解密,保證數(shù)據(jù)的安全性。


      圖1為本發(fā)明實(shí)施例的總序列流程圖;
      圖2是本發(fā)明實(shí)施例中客戶端處理流程分段圖一 ;
      圖3是本發(fā)明實(shí)施例中客戶端處理流程分段圖二 ;
      圖4是服務(wù)端SendData方法處理流程圖。
      具體實(shí)施例方式
      下面以非限定性的實(shí)施方式進(jìn)一步解釋、說明本技術(shù)方案。 圖1是一種基于CORBA接口方法自適應(yīng)調(diào)用方法的序列流程圖,圖1中左側(cè)部分
      為用戶函數(shù),右側(cè)部分的處理過程是在服務(wù)端完成的,而中間部分的處理過程是在客戶端
      完成的??蛻舳肆鞒田@示了一個(gè)完整的利用本技術(shù)進(jìn)行遠(yuǎn)程CORBA調(diào)用的流程,服務(wù)流程
      則是在初始化后滿足客戶請(qǐng)求服務(wù)的并發(fā)處理流程和用戶函數(shù)的業(yè)務(wù)處理流程。 首先對(duì)客戶端和服務(wù)端進(jìn)行初始化,這與本發(fā)明的實(shí)質(zhì)無關(guān),且是本領(lǐng)域普通技
      術(shù)人員熟知的。 在初始化完成后,本發(fā)明首先開始于客戶端,即在步驟101,客戶端將方法標(biāo)識(shí)及 輸入?yún)?shù)轉(zhuǎn)換成二進(jìn)制序列,并連接服務(wù)端建立會(huì)話。服務(wù)端會(huì)相應(yīng)的建立會(huì)話緩沖區(qū)。
      然后在步驟102,客戶端利用遠(yuǎn)程網(wǎng)絡(luò)自適應(yīng)傳輸?shù)椒?wù)端,即動(dòng)態(tài)調(diào)整發(fā)送尺寸 大小以適應(yīng)網(wǎng)絡(luò)實(shí)際情況的方式傳輸。 然后進(jìn)入服務(wù)端流程,在步驟103,服務(wù)端將二進(jìn)制序列轉(zhuǎn)換成方法標(biāo)識(shí)及輸入?yún)?shù)。
      在步驟104,服務(wù)端本地方法調(diào)用,產(chǎn)生輸出參數(shù)。 在步驟105,服務(wù)端將方法標(biāo)識(shí)及輸出參數(shù)轉(zhuǎn)換成二進(jìn)制序列,返回客戶端。
      然后在客戶端,在步驟106,客戶端從服務(wù)端自適應(yīng)網(wǎng)絡(luò)讀取二進(jìn)制序列,即動(dòng)態(tài) 調(diào)整讀取尺寸大小。 在步驟107,客戶端結(jié)束會(huì)話,將二進(jìn)制序列轉(zhuǎn)換成方法標(biāo)識(shí)和輸出參數(shù),返回給 函數(shù)。即完成了自適應(yīng)調(diào)用,完成了接口方法和序列的相互轉(zhuǎn)換,返回用戶方法調(diào)用結(jié)果。
      圖2、圖3是從客戶端的角度是步驟101、 102、 (103、 104、 105) 、 106、 107的實(shí)現(xiàn)流 程圖,其中步驟103、104、105在服務(wù)端完成,但由客戶端觸發(fā)。 首先開始于客戶端,在步驟201,客戶端將輸出參數(shù)依序換成CORBA: :Any,寫入 CORBA: :Any的序列,然后進(jìn)行到步驟202。在步驟202,客戶端將CORBA: :Any的序列和方法名寫入結(jié)構(gòu)FuncParamln。
      然后在步驟203,客戶端將結(jié)構(gòu)FuncParamln轉(zhuǎn)換成CORBA: :Any,再在步驟204轉(zhuǎn) 換成二進(jìn)制序列。 然后在步驟205,客戶端調(diào)用BeginSession函數(shù)從服務(wù)端獲取一個(gè)唯一標(biāo)識(shí)會(huì)話 的SessionID。 上述將接口方法轉(zhuǎn)換為了二進(jìn)制序列,為下面?zhèn)鬏斪鰷?zhǔn)備。
      以下實(shí)現(xiàn)步驟102 : 步驟206,客戶端將0賦給Pos,配置的長(zhǎng)度賦給len。 步驟207,判斷Pos大于二進(jìn)制序列的長(zhǎng)度,即數(shù)據(jù)傳輸完成,則進(jìn)入點(diǎn)C,轉(zhuǎn)入步 驟106,如果否,則進(jìn)入步驟208。
      步驟208,判斷Pos+len是否大于二進(jìn)制序列的長(zhǎng)度,如果不是,到步驟209 ;如果 是到步驟210。 步驟209 , i s_over設(shè)為fal se ,轉(zhuǎn)步驟211。
      步驟210, is_over設(shè)為true。 步驟211,客戶端從二進(jìn)制序列中的指定位置Pos取長(zhǎng)度len的數(shù)據(jù)(不足len則 全取剩下的),調(diào)用SendData發(fā)送。 步驟212,發(fā)送失敗嗎?如果失敗轉(zhuǎn)步驟213,否則轉(zhuǎn)步驟216 ; 步驟213,是網(wǎng)絡(luò)原因引起的異常嗎?如果不是,拋出異常,報(bào)錯(cuò),退出本流程;如
      果是,繼續(xù)。 步驟214, len達(dá)到0最小值且連續(xù)三次失敗嗎?是則,拋出異常,報(bào)錯(cuò),退出本流 程;如果不是,繼續(xù)。 步驟215, len取原有長(zhǎng)度的八分之一,轉(zhuǎn)步驟220 ;
      步驟216, Pos = Pos+len,即準(zhǔn)備取下一個(gè)發(fā)送塊; 步驟217,本次傳輸時(shí)間小于最短增大時(shí)間嗎?(速率一定,傳輸數(shù)據(jù)塊小,則傳 輸時(shí)間短)是,則轉(zhuǎn)步驟222,否則繼續(xù)。 步驟218,本次傳輸時(shí)間大于最長(zhǎng)減短時(shí)間嗎?不是,表明當(dāng)前長(zhǎng)度傳輸數(shù)據(jù)合 適,不需改變,轉(zhuǎn)步驟207 ;是,繼續(xù); 步驟219, len = len/2,發(fā)送長(zhǎng)度取原來的一半; 步驟220,發(fā)送長(zhǎng)度len小于1或者設(shè)置的最小發(fā)送長(zhǎng)度嗎?不是,則表明為一個(gè) 可信的長(zhǎng)度,轉(zhuǎn)步驟207,按len發(fā)送數(shù)據(jù);是則,繼續(xù)。 步驟221,設(shè)置1或者最小發(fā)送長(zhǎng)度為發(fā)送長(zhǎng)度,即len = 1或者最小發(fā)送長(zhǎng)度,轉(zhuǎn) 步驟207。 步驟222, len = 2*len,發(fā)送長(zhǎng)度增大一倍; 步驟223, len大于最大長(zhǎng)度嗎?如果不大于,轉(zhuǎn)步驟207,否則,繼續(xù)。
      步驟224, len取最大長(zhǎng)度,即len =最大長(zhǎng)度。轉(zhuǎn)步驟207。
      以上說明了自適應(yīng)線路傳輸輸入?yún)?shù)的實(shí)現(xiàn)方法。 客戶端調(diào)用了 SendData方法,服務(wù)端按照?qǐng)D4的流程處理。SendData方法的服務(wù) 端處理流程分為兩條, 一條為is_0Ver為false的處理流程,只是簡(jiǎn)單地將數(shù)據(jù)加入到會(huì)話 的輸入緩沖區(qū);一條為is_0Ver為true的處理流程,具體實(shí)現(xiàn)步驟103, 104, 105。說明如 下 步驟401,根據(jù)服務(wù)端給出的sessionid從數(shù)據(jù)緩沖區(qū)取會(huì)話的輸入緩沖區(qū)的數(shù) 據(jù)。 步驟402, is_over為false嗎?如果是,轉(zhuǎn)步驟408,否則,繼續(xù)。 步驟403,將接收數(shù)據(jù)轉(zhuǎn)換成C0RBA: : Any,再轉(zhuǎn)換成FuncParamIn。 步驟404,將根據(jù)方法名將FuncParamIn中的輸入C0RBA: :Any序列轉(zhuǎn)換成輸入?yún)?shù)。 步驟405,將根據(jù)方法名調(diào)用實(shí)際的實(shí)現(xiàn)方法執(zhí)行,并返回輸出參數(shù)和返回值。
      步驟406,將輸出參數(shù)依序轉(zhuǎn)換成C0RBA: :Any,寫入C0RBA: :Any序列,并把方法 名、C0RBA: :Any序列返回值寫入FuncParam0ut。
      8
      步驟407,將FuncParamOut轉(zhuǎn)換成CORBA: :Any,再轉(zhuǎn)換成二進(jìn)制序列寫入會(huì)話的輸出數(shù)據(jù)緩沖區(qū)。SendData方法返回。 步驟408,將接收到的數(shù)據(jù)加入到輸入緩沖區(qū),SendData方法返回。其中,步驟403、步驟404實(shí)現(xiàn)步驟103,步驟405實(shí)現(xiàn)步驟104,步驟406、步驟407
      實(shí)現(xiàn)步驟105。 客戶端調(diào)用了 is—over為true的SendData方法后,轉(zhuǎn)入步驟106取輸出數(shù)據(jù),接圖3中的C點(diǎn)繼續(xù)。說明如下 步驟301, Pos = O,從第個(gè)位置開始取數(shù)據(jù)。 步驟302,調(diào)用服務(wù)端的SetOutDataLen函數(shù)設(shè)置每次輸出數(shù)據(jù)長(zhǎng)度為len。因?yàn)槊看稳?shù)據(jù)都由服務(wù)端給出一個(gè)長(zhǎng)度的數(shù)據(jù),所以要告訴服務(wù)端適合當(dāng)前網(wǎng)絡(luò)情況的數(shù)據(jù)長(zhǎng)度。 步驟303,調(diào)用服務(wù)端的GetOutData函數(shù)從Pos位取長(zhǎng)度為L(zhǎng)en的數(shù)據(jù)取輸出數(shù)據(jù)。 步驟304, GetOutData函數(shù)執(zhí)行成功嗎?如果執(zhí)行成功,轉(zhuǎn)步驟308 ;如果執(zhí)行失敗,繼續(xù)。 步驟305,失敗是因?yàn)榫W(wǎng)絡(luò)原因嗎?不是,拋出異常,結(jié)束;是,繼續(xù)。 步驟306, len為O或者設(shè)置的下限值嗎且連續(xù)三次失敗嗎?是,則拋出異常,結(jié)
      束;不是,繼續(xù)。 步驟307, len = len/8,輸出長(zhǎng)度取原來的八分之一,轉(zhuǎn)步驟314。 步驟308, is—over為true嗎?是,表明輸出數(shù)據(jù)已取完,轉(zhuǎn)319,進(jìn)入步驟107 ;否
      則,繼續(xù)。 步驟309,取得的數(shù)據(jù)放入本地輸出緩沖區(qū)。
      步驟310, Pos = Pos+len,準(zhǔn)備取下一段輸出數(shù)據(jù)。 步驟311,傳輸時(shí)間小于最短增大時(shí)間嗎?是,則表明使用的傳輸長(zhǎng)度太短,需要增大,轉(zhuǎn)步驟316;不是,繼續(xù)。 步驟312,傳輸時(shí)間大于最長(zhǎng)減短時(shí)間嗎?不是,表明使用的傳輸長(zhǎng)度合適,無需改變,轉(zhuǎn)步驟303 ;是,則表明使用的傳輸長(zhǎng)度太長(zhǎng),需要減短,繼續(xù)。
      步驟313, len = len/2,輸出長(zhǎng)度取原來的二分之一。 步驟314,len小于l或者最小長(zhǎng)度嗎?檢查len的合法性。不是,即長(zhǎng)度合法,轉(zhuǎn)302;是,即長(zhǎng)度不合法,繼續(xù)。 步驟315,將len設(shè)置為1或者最小長(zhǎng)度。轉(zhuǎn)步驟302。
      步驟316, len = len*2,輸出長(zhǎng)度取原來的二倍。 步驟317, Len大于最大長(zhǎng)度嗎?檢查len的合法性。不是,即長(zhǎng)度合法,轉(zhuǎn)302 ;是,即長(zhǎng)度不合法,繼續(xù)。 步驟318,將len設(shè)置為最大長(zhǎng)度。轉(zhuǎn)步驟302。 步驟319,將本地輸出緩沖區(qū)的二進(jìn)制流轉(zhuǎn)換為CORBA:Any,再轉(zhuǎn)換為F皿cPar咖Out 。 步驟320,將FuncParamOut中的輸出依次轉(zhuǎn)換為調(diào)用函數(shù)的輸出參數(shù)。
      步驟321, FuncParamOut中的返回值轉(zhuǎn)換調(diào)用函數(shù)的返回值。
      步驟322,調(diào)用服務(wù)端EndSession清除服務(wù)端會(huì)話數(shù)據(jù)。客戶端用戶函數(shù)正常調(diào)用結(jié)束。 本流程中,步驟301到步驟318實(shí)現(xiàn)了步驟106,步驟319到步驟322實(shí)現(xiàn)了步驟107。
      權(quán)利要求
      一種基于CORBA接口方法自適應(yīng)調(diào)用方法,包括客戶端和服務(wù)端,其特征在于包括如下步驟1)客戶端將方溶標(biāo)識(shí)及輸入?yún)?shù)轉(zhuǎn)換成二進(jìn)制序列,并連接服務(wù)端建立會(huì)話;2)客戶端利用遠(yuǎn)程網(wǎng)絡(luò)自適應(yīng)傳輸?shù)椒?wù)端,即動(dòng)態(tài)調(diào)整發(fā)送尺寸大小;3)服務(wù)端將二進(jìn)制序列轉(zhuǎn)換成方法標(biāo)識(shí)及輸入?yún)?shù);4)服務(wù)端本地方法調(diào)用,產(chǎn)生輸出參數(shù);5)服務(wù)端將方法標(biāo)識(shí)及輸出參數(shù)轉(zhuǎn)換成二進(jìn)制序列;6)客戶端從服務(wù)端自適應(yīng)網(wǎng)絡(luò)讀取二進(jìn)制序列,即動(dòng)態(tài)調(diào)整讀取尺寸大小;7)客戶端結(jié)束會(huì)話,將二進(jìn)制序列轉(zhuǎn)換成方法標(biāo)識(shí)和輸出參數(shù),返回給函數(shù)。
      2. 根據(jù)權(quán)利要求1所述的基于CORBA接口方法自適應(yīng)調(diào)用方法,其特征在于上述步 驟1)是這樣實(shí)現(xiàn)的1-1)客戶端將輸入?yún)?shù)依序轉(zhuǎn)換成CORBA: :Any,寫入CORBA: :Any的序列;1-2)客戶端將CORBA: :Any的序列和方法名寫入結(jié)構(gòu)FuncParamln ;1-3)客戶端將結(jié)構(gòu)FuncParamln轉(zhuǎn)換成CORBA: : Any,再轉(zhuǎn)換成二進(jìn)制序列;1- 4)客戶端調(diào)用BeginSession函數(shù)從服務(wù)端獲取一個(gè)唯一標(biāo)識(shí)會(huì)話的SessionID。
      3. 根據(jù)權(quán)利要求1所述的基于CORBA接口方法自適應(yīng)調(diào)用方法,其特征在于上述步 驟2)是這樣實(shí)現(xiàn)的2- 1)客戶端將0賦給Pos,配置的長(zhǎng)度賦給len ; 2-2)如果Pos大于二進(jìn)制序列的長(zhǎng)度則轉(zhuǎn);2-3)客戶端從二進(jìn)制序列中的指定位置Pos取長(zhǎng)度len的數(shù)據(jù);2-4)客戶端調(diào)用SendData方法將數(shù)據(jù)發(fā)送到服務(wù)端,如果Pos+len等于二進(jìn)制序列的 長(zhǎng)度,則SendData函數(shù)的is_0Ver參數(shù)為true,通知服務(wù)端輸入?yún)?shù)的二進(jìn)制序列傳輸完 成,否則為false ;2-5)服務(wù)端接收到數(shù)據(jù)后,根據(jù)SessionID,將接收的數(shù)據(jù)放到會(huì)話的輸入緩沖區(qū),如 果服務(wù)端接收到的is_0Ver參數(shù)為true,則轉(zhuǎn)到步驟3);2-6)如果步驟2-4)失敗,檢查是否是網(wǎng)絡(luò)產(chǎn)生的原因,如果是,就將len減為八分之 一,否則報(bào)錯(cuò)退出;2- 7)步驟2-4)如果成功,檢查是否完成發(fā)送,完成轉(zhuǎn)步驟6),否則檢查調(diào)用的時(shí)間是 否小于最小調(diào)長(zhǎng)時(shí)間,如果是,len增大一倍;否則,判斷調(diào)用時(shí)間是否大于最大調(diào)短時(shí)間, 如果是,則len減少一半,Pos = Pos+len,返回步驟2-3)。
      4. 根據(jù)權(quán)利要求3所述的基于C0RBA接口方法自適應(yīng)調(diào)用方法,其特征在于上述步 驟2-6)中如果步驟2-4)失敗,檢查是否是網(wǎng)絡(luò)產(chǎn)生的原因,如果是,就將len減為八分之 一,此時(shí),如果len的八分之一小于最小包長(zhǎng)度,則len的值設(shè)為最小包長(zhǎng)度;步驟2_7)中 檢查調(diào)用的時(shí)間是否小于最小調(diào)長(zhǎng)時(shí)間,如果是,len增大一倍,此時(shí),如果len的二倍大于 最大包長(zhǎng)度,則len的值設(shè)定為最大包長(zhǎng)度。
      5. 根據(jù)權(quán)利要求1所述的基于CORBA接口方法自適應(yīng)調(diào)用方法,其特征在于上述步 驟3)是這樣實(shí)現(xiàn)的3- 1)服務(wù)端根據(jù)SessionID從會(huì)話緩沖區(qū)中取出二進(jìn)制序列,將二進(jìn)制序列轉(zhuǎn)換成 CORBA::Any ;3-2)再將C0RBA: :Any轉(zhuǎn)換成結(jié)構(gòu)FuncParamln ;3-3)服務(wù)端根據(jù)結(jié)構(gòu)FuncParamln中的方法標(biāo)識(shí),將其中的C0RBA: : Any序列逐個(gè)轉(zhuǎn)換 成輸入?yún)?shù)。
      6. 根據(jù)權(quán)利要求1所述的基于CORBA接口方法自適應(yīng)調(diào)用方法,其特征在于上述步 驟4)是這樣實(shí)現(xiàn)的服務(wù)端將轉(zhuǎn)換出來的輸入?yún)?shù)作為輸入?yún)?shù),定義輸出參數(shù),調(diào)用與 FuncParamln中指定的方法名一致的本地的方法,得到輸出參數(shù)。
      7. 根據(jù)權(quán)利要求1所述的基于CORBA接口方法自適應(yīng)調(diào)用方法,其特征在于上述 步驟5)是這樣實(shí)現(xiàn)的服務(wù)端將輸出參數(shù)依序轉(zhuǎn)換成CORBA: :Any,寫入CORBA: :Any的 序列;再將CORBA: :Any的序列和方法名寫入結(jié)構(gòu)FuncParamOut ;然后將返回值轉(zhuǎn)換成 CORBA: :Any,寫入結(jié)構(gòu)FuncParamOut ;然后將結(jié)構(gòu)FuncParamOut轉(zhuǎn)換成CORBA: :Any,再轉(zhuǎn) 換成二進(jìn)制序列;最后將二進(jìn)制序列放入會(huì)話的輸出緩沖區(qū),等待客戶端讀取。
      8. 根據(jù)權(quán)利要求1所述的基于CORBA接口方法自適應(yīng)調(diào)用方法,其特征在于上述步 驟6)是這樣實(shí)現(xiàn)的6-1)客戶端將O賦給Pos ;6-2)客戶端調(diào)用SetOutDataLen設(shè)置每次輸出數(shù)據(jù)的長(zhǎng)度為len(為發(fā)送時(shí)使用的長(zhǎng) 度),如果客戶端不設(shè)置,服務(wù)端使用缺省值;6-3)客戶端調(diào)用GetOutData函數(shù)訪問服務(wù)端,服務(wù)端根據(jù)SessionID從會(huì)話的輸出緩 沖區(qū)的二進(jìn)制序列的Pos位置取長(zhǎng)度為len的數(shù)據(jù)返回,如果Pos+len等于輸出緩沖區(qū)的 二進(jìn)制序列的長(zhǎng)度,則GetOutData的data_is_over參數(shù)輸出為true,否則為false ;6-4)如果步驟6-3)失敗,檢查是否是網(wǎng)絡(luò)產(chǎn)生的原因,如果是,就將len減為八分之 一,然后轉(zhuǎn)6-3);否則報(bào)錯(cuò)退出;6-5)步驟6-3)如果成功,檢查data_is_over是否為true,為true為完成轉(zhuǎn)步驟7), 否則檢查調(diào)用的時(shí)間是否小于最小調(diào)長(zhǎng)時(shí)間,如果是,len增大一倍,否則,判斷調(diào)用時(shí)間是 否大于最大調(diào)短時(shí)間,如果是,則len減少一半,SetOutDataLen設(shè)置每次輸出數(shù)據(jù)的長(zhǎng)度 為len,調(diào)用Pos = Pos+len,返回步驟6-3)。
      9. 根據(jù)權(quán)利要求8所述的基于C0RBA接口方法自適應(yīng)調(diào)用方法,其特征在于步驟 6-4)中如果步驟6-3)失敗,檢查是否是網(wǎng)絡(luò)產(chǎn)生的原因,如果是,就將len減為八分之一, 此時(shí),如果len的八分之一小于最小包長(zhǎng)度,則len的值設(shè)為最小包長(zhǎng)度;步驟6_5)中檢查 調(diào)用的時(shí)間是否小于最小調(diào)長(zhǎng)時(shí)間,如果是,len增大一倍,此時(shí),如果len的八分之一小于 最小包長(zhǎng)度,則len的值設(shè)為最小包長(zhǎng)度;而步驟6-5)中判斷調(diào)用時(shí)間是否大于最大調(diào)短 時(shí)間,如果是,則len減少一半,此時(shí),如果len的一半小于最小包長(zhǎng)度,則len的值設(shè)為最 小包長(zhǎng)度。
      10. 根據(jù)權(quán)利要求1所述的基于CORBA接口方法自適應(yīng)調(diào)用方法,其特征在于上述步 驟7)是這樣實(shí)現(xiàn)的客戶端將讀取的二進(jìn)制序列轉(zhuǎn)換成CORBA: :Any ;再將CORBA: :Any轉(zhuǎn) 換成結(jié)構(gòu)FuncParamOut ;然后根據(jù)結(jié)構(gòu)FuncParamOut中的方法標(biāo)識(shí),將其中的CORBA: :Any 序列逐個(gè)轉(zhuǎn)換成輸出參數(shù),將返回值CORBA: :Any轉(zhuǎn)換成返回值;再調(diào)用EndSession,服務(wù) 端將會(huì)話的相關(guān)緩沖區(qū)釋放;最后將輸出參數(shù)、返回值返回給用戶。
      全文摘要
      本發(fā)明是一種基于CORBA接口方法自適應(yīng)調(diào)用方法,把接口方法名及參數(shù)打包成二進(jìn)制的序列,利用傳輸切片技術(shù),將二進(jìn)制序列分片發(fā)送到服務(wù)端,在服務(wù)端將二進(jìn)制序列轉(zhuǎn)換成接口名和參數(shù),調(diào)用服務(wù)端的接口方法,再將輸出參數(shù)轉(zhuǎn)換成二進(jìn)制序列傳輸?shù)娇蛻舳恕>哂腥缦聝?yōu)點(diǎn)1.使得CORBA技術(shù)可以延伸到狀況更差的網(wǎng)絡(luò)。2.維持原有的接口業(yè)務(wù)邏輯不變。3.二進(jìn)制傳輸可以擴(kuò)展加密。
      文檔編號(hào)H04L29/06GK101702719SQ20091022962
      公開日2010年5月5日 申請(qǐng)日期2009年10月28日 優(yōu)先權(quán)日2009年10月28日
      發(fā)明者羅端紅, 郭長(zhǎng)國(guó) 申請(qǐng)人:山東中創(chuàng)軟件商用中間件股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1