欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于長連接的雙向調(diào)用方法及系統(tǒng)的制作方法

文檔序號:9527599閱讀:991來源:國知局
一種基于長連接的雙向調(diào)用方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種基于長連接的雙向調(diào)用方法及系統(tǒng),屬于網(wǎng)絡(luò)與信息安全技術(shù)領(lǐng) 域。
【背景技術(shù)】
[0002] 遠(yuǎn)程過程調(diào)用(RemoteProcedureCall,RPC),是一種計(jì)算機(jī)通信協(xié)議,使用非常 廣泛。RPC使得一臺計(jì)算機(jī)中運(yùn)行的程序可以直接調(diào)用另一臺計(jì)算機(jī)的子程序。遠(yuǎn)程過程 調(diào)用是一個分布式計(jì)算的客戶端一一服務(wù)器(CS)的模型??蛻舳丝梢韵蚍?wù)器發(fā)送一些 請求,并提供一定的參數(shù),服務(wù)器執(zhí)行特定的過程之后,將執(zhí)行結(jié)果返回的客戶端。
[0003] 經(jīng)過長時間的發(fā)展,RPC已經(jīng)有比較多的實(shí)現(xiàn):
[0004] 1)SunRPC機(jī)制的實(shí)現(xiàn)是建立在UNIX4. 2BSDSOCKET和TCP、UDP協(xié)議的基 礎(chǔ)上,通過一組例程庫實(shí)現(xiàn)。RPCLibrary包括RPCroutines和XDR(ExternalData Representation)庫函數(shù),其中XDR庫是一個C函數(shù)的集合,是SUN制定的數(shù)據(jù)表示標(biāo)準(zhǔn)。 Java中普通的RPC方法只能傳送由XDR定義的數(shù)據(jù)類型,不能傳送對象。
[0005] 2)DCERPC機(jī)制是從Apollo的網(wǎng)絡(luò)計(jì)算系統(tǒng)(NetworkComputingSystem)發(fā)展 而來。該機(jī)制是用接口(interface)機(jī)制來協(xié)調(diào)客戶端向服務(wù)器的遠(yuǎn)程過程調(diào)用。每個接 口包括用接口定義語言(InterfaceDefinitionLanguage)來描述遠(yuǎn)程調(diào)用的一個或多個 過程,以及相應(yīng)的參數(shù)。
[0006] 3)JavaRMI機(jī)制,是純Java的遠(yuǎn)程方法調(diào)用,主要功能就是提供客戶端程序調(diào)用 位于遠(yuǎn)程服務(wù)器上對象所提供的方法,這樣可將部分邏輯處理放在遠(yuǎn)端服務(wù)器上。Java RMI是面向?qū)ο蟮腞PC。RMI對象時綁定在本地的,只有遠(yuǎn)程方法參數(shù)和返回值是通過網(wǎng)絡(luò) 傳輸?shù)摹?br>[0007] 由于JavaRMI應(yīng)該很廣泛,也能代表現(xiàn)有的較多的RPC,因此在此對其技術(shù)細(xì)節(jié) 進(jìn)行分析,并指出現(xiàn)有RPC的一些缺陷,最后提出新的解決方案。
[0008] RMI中有兩種特殊類型的對象,稱為客戶端存根和服務(wù)器端框架,這些是RMI的第 一層,也是基礎(chǔ)層??蛻舳舜娓淖饔檬亲鳛檫h(yuǎn)程服務(wù)器的代理,是客戶對象;而服務(wù)器端 框架則是從網(wǎng)路鏈接中讀取客戶端的調(diào)用參數(shù),向遠(yuǎn)程服務(wù)實(shí)現(xiàn)對象進(jìn)行調(diào)用,接受返回 值,然后通過鏈接返回到客戶端存根。
[0009] 遠(yuǎn)程引用層(RemoteReferenceLayer)則是負(fù)責(zé)專門的遠(yuǎn)程方法協(xié)議,這一層處 理底層遠(yuǎn)程方法調(diào)用連接的調(diào)用語義。RemoteReference提供RemoteRef對象,代表遠(yuǎn)程 對象的一個句柄,通過RemoteRef對象,可以執(zhí)行遠(yuǎn)程對象方法調(diào)用。
[0010] 傳輸層(TransportLayer),負(fù)責(zé)具體的客戶端到服務(wù)器端的基于流的網(wǎng)絡(luò)連接。 該層負(fù)責(zé)建立連接、對連接管理、監(jiān)控連接狀態(tài)、監(jiān)聽新的調(diào)用、維護(hù)遠(yuǎn)程對象表、定位遠(yuǎn)程 調(diào)用的調(diào)度程序等。
[0011] 現(xiàn)有的RPC基本都是專注于客戶端到服務(wù)器端的方法調(diào)用,也就是傳統(tǒng)的CS結(jié) 構(gòu),因此服務(wù)器端也就必須要處于網(wǎng)絡(luò)可發(fā)現(xiàn)狀態(tài),這樣客戶端才能連接上服務(wù)器。現(xiàn)有的 RPC都存在如下可改進(jìn)的地方:
[0012] 1)只能由客戶端主動向服務(wù)器端進(jìn)行遠(yuǎn)程過程調(diào)用,而不能支持服務(wù)器端到客戶 端的遠(yuǎn)程過程調(diào)用;
[0013] 2)僅支持網(wǎng)絡(luò)全局對象的方法調(diào)用,而不支持針對遠(yuǎn)程局部對象的訪問;
[0014] 在實(shí)際分布式網(wǎng)絡(luò)應(yīng)用中,RPC使用很廣泛。目前的RPC也能滿足大部分的遠(yuǎn)程 過程調(diào)用需求,然而還存在一些場景,比如:服務(wù)器要主動推送數(shù)據(jù)到客戶端,或是調(diào)用客 戶端的一些對象的方法,或是在進(jìn)行遠(yuǎn)程過程調(diào)用的時候,要將本地局部對象的引用作為 參數(shù)。在客戶端與服務(wù)器端的過程調(diào)用比較多樣、密集的時候,以上場景都常出現(xiàn)。因此非 常需要針對這些需求的RPC。

【發(fā)明內(nèi)容】

[0015] 在傳統(tǒng)模式下,外網(wǎng)的應(yīng)用不能直接調(diào)用內(nèi)網(wǎng)應(yīng)用提供的遠(yuǎn)程對象服務(wù)。該RPC 組件突破了這一限制,使得內(nèi)網(wǎng)應(yīng)用可以向外網(wǎng)應(yīng)用提供一個遠(yuǎn)程對象,讓外網(wǎng)應(yīng)用能主 動向內(nèi)網(wǎng)應(yīng)用發(fā)送消息。
[0016] 本發(fā)明所要解決的技術(shù)問題是,提供一種適用于不局限于局域網(wǎng)的基于長連接的 雙向調(diào)用方法。
[0017] 本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種基于長連接的雙向調(diào)用方法,具 體包括以下步驟:
[0018] 步驟1 :本地端作為連接的發(fā)起者,多個遠(yuǎn)程端作為連接的接收者,本地端分別發(fā) 起連接請求到多個遠(yuǎn)程端;
[0019] 步驟2 :每個遠(yuǎn)程端接收一個連接請求,本地端和每個遠(yuǎn)程端都相應(yīng)的獲得一個 進(jìn)行傳輸字節(jié)流的連接對象,本地端和遠(yuǎn)程端建立連接;
[0020] 步驟3 :本地端與遠(yuǎn)程端協(xié)商確定一個序列化協(xié)議,并使用該協(xié)議包裝字節(jié)流連 接,從而提供一個對象傳輸?shù)耐ǖ溃?br>[0021] 步驟4 :遠(yuǎn)程端將序列化的連接對象發(fā)送到本地端,本地端執(zhí)行通信線程,通信線 程內(nèi)包含棧,當(dāng)通信線程執(zhí)行本地代碼,通信線程內(nèi)棧的棧定節(jié)點(diǎn)成為活躍節(jié)點(diǎn);
[0022] 步驟5 :調(diào)用遠(yuǎn)程方法,通信線程執(zhí)行遠(yuǎn)程代碼,遠(yuǎn)程端出現(xiàn)遠(yuǎn)程通信線程,活躍 節(jié)點(diǎn)轉(zhuǎn)移到遠(yuǎn)程端,本地端進(jìn)入暫停狀態(tài);
[0023] 步驟6 :遠(yuǎn)程通信線程執(zhí)行完畢,遠(yuǎn)程通信線程結(jié)束,活躍節(jié)點(diǎn)從遠(yuǎn)程端轉(zhuǎn)移到本 地端;
[0024] 步驟7 :本地端恢復(fù)獲得活躍節(jié)點(diǎn),判斷當(dāng)前通信是否完成,如果是,執(zhí)行步驟8 ; 否則,執(zhí)行步驟5;
[0025] 步驟8 :判斷連接是否還存在于遠(yuǎn)程端,如果是,執(zhí)行步驟4 ;否則,執(zhí)行步驟9 ;
[0026] 步驟9 :關(guān)閉連接,清除無效連接對象。
[0027] 本發(fā)明的有益效果是:本發(fā)明通信雙方都可以互相調(diào)用對方提供的遠(yuǎn)程對象服 務(wù),不會受局域網(wǎng)的限制;提供一種類似于本地方法調(diào)用的方法調(diào)用方式,將遠(yuǎn)程對象的提 供過程設(shè)計(jì)成參數(shù)傳遞中的傳引用方式。
[0028] 在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0029] 進(jìn)一步,所述連接是持久的,被多個遠(yuǎn)程對象共享;通信雙方都可以在這個連接 上,為對方提供遠(yuǎn)程對象,實(shí)現(xiàn)"長鏈接"和"雙向"的功能。
[0030] 進(jìn)一步,所述步驟9具體包括以下步驟:
[0031] 步驟9. 1 :本地端的序列化組件對象向底層的連接對象發(fā)送一個關(guān)閉連接請求;
[0032] 步驟9. 2:底層的連接對象收到關(guān)閉連接請求后,將關(guān)閉連接請求發(fā)送到遠(yuǎn)程的 連接對象,關(guān)閉連接;
[0033] 步驟9. 3:本地端刪除無效的序列化組件對象,遠(yuǎn)程端刪除無效的連接對象。
[0034] 進(jìn)一步,所述步驟1首先查詢本地端所支持的序列化協(xié)議,并將這些協(xié)議的名字 按照最期望使用到最不期望使用的順序排成一個序列,將該序列轉(zhuǎn)換為元素逗號分隔的字 符串,本地端將字符串發(fā)送到遠(yuǎn)程端。
[0035] 進(jìn)一步,所述步驟2具體包括以下步驟:
[0036] 步驟2. 1 :遠(yuǎn)程端接收連接請求和字符串,提取其中每一個元素;
[0037] 步驟2. 2:選取一個元素進(jìn)行檢查,判斷遠(yuǎn)程端是否支持,如果是,執(zhí)行步驟2. 4, 否則,執(zhí)行步驟2. 3;
[0038] 步驟2.3 :判斷是否還有元素未進(jìn)行檢查,如果是,執(zhí)行步驟2.2 ;否則,遠(yuǎn)程端向 本地端返回連接失敗信息,結(jié)束;
[0039] 步驟2. 4:本地端和遠(yuǎn)程端建立連接,遠(yuǎn)程端向本地端發(fā)布遠(yuǎn)程對象,本地端獲得 對應(yīng)遠(yuǎn)程對象的引用對象。
[0040] 進(jìn)一步,所述步驟5中的調(diào)用遠(yuǎn)程方法采用傳引用的方法,傳引用方法具體包括 以下步驟:
[0041] 步驟a:本地端在發(fā)起對遠(yuǎn)程端的遠(yuǎn)程過程調(diào)用時,先在本地端檢查方法中的所 有參數(shù);
[0042] 步驟b:判斷參數(shù)中是否包括引用對象,如果是,執(zhí)行步驟c;否則,執(zhí)行步驟d;
[0043] 步驟c:本地端將此參數(shù)發(fā)布為遠(yuǎn)程對象;
[0044] 步驟d:將此調(diào)用封裝為請求對象和響應(yīng)對象,并發(fā)送到遠(yuǎn)程端進(jìn)行處理;
[0045] 步驟e:遠(yuǎn)程端接收到請求對象并解析,掃描遠(yuǎn)程引用參數(shù),并將其中作為引用傳 輸?shù)膮?shù)用相應(yīng)的遠(yuǎn)程對象代替;遠(yuǎn)程端繼續(xù)按照正常的過程執(zhí)行來自本地端的方法調(diào) 用;
[0046] 步驟f:遠(yuǎn)程端完成方法調(diào)用之后,搜集結(jié)果并判斷結(jié)果是否為遠(yuǎn)程對象;如果 是,執(zhí)
當(dāng)前第1頁1 2 3 4 5 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
壤塘县| 个旧市| 平定县| 武穴市| 巧家县| 高阳县| 睢宁县| 兰坪| 鹤庆县| 黄浦区| 江安县| 观塘区| 睢宁县| 正宁县| 通许县| 阳泉市| 昆山市| 叶城县| 确山县| 西华县| 紫金县| 呼和浩特市| 德钦县| 阳江市| 青冈县| 洞口县| 伊通| 信宜市| 昭苏县| 资阳市| 石阡县| 屯昌县| 盈江县| 铁岭县| 静海县| 丰顺县| 江陵县| 南漳县| 平潭县| 武冈市| 若羌县|