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

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

文檔序號(hào):9527599閱讀:來(lái)源:國(guó)知局
列化協(xié)議進(jìn)行比對(duì),最終確定客戶端和服務(wù)器端都支持的一種協(xié)議作為序列化協(xié) 議;
[0147] c)遠(yuǎn)程過(guò)程調(diào)用說(shuō)明了雙向遠(yuǎn)程對(duì)象服務(wù)的建立。服務(wù)器端會(huì)發(fā)布遠(yuǎn)程對(duì)象,供 客戶端進(jìn)行遠(yuǎn)程調(diào)用??蛻舳嗽谡{(diào)用時(shí),會(huì)包裝和發(fā)送請(qǐng)求對(duì)象給服務(wù)器端,如果調(diào)用參數(shù) 包括局部對(duì)象,則也會(huì)將此對(duì)象發(fā)布為遠(yuǎn)程對(duì)象。服務(wù)器端會(huì)解析請(qǐng)求對(duì)象,并執(zhí)行調(diào)用過(guò) 程,其中也可能會(huì)涉及到對(duì)客戶端的遠(yuǎn)程對(duì)象的反向調(diào)用。服務(wù)器端搜集調(diào)用結(jié)果,封裝為 結(jié)果對(duì)象返回給客戶端;
[0148] d)當(dāng)調(diào)用過(guò)程正常結(jié)束后,連接斷開(kāi)時(shí),要涉及到遠(yuǎn)程對(duì)象的善后處理。主要通過(guò) Java的GC機(jī)制等對(duì)遠(yuǎn)程對(duì)象進(jìn)行清理。
[0149] 使用雙向連接,使得客戶端不受局域網(wǎng)的限制,也可以發(fā)布遠(yuǎn)程對(duì)象服務(wù),供服務(wù) 器端進(jìn)行調(diào)用。當(dāng)然,客戶端和服務(wù)器都在廣域網(wǎng)中,或是都在局域網(wǎng)中,也可以使用雙向 連接的特性;
[0150] 客戶端向服務(wù)器端發(fā)起的遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求對(duì)象中,如果含有特定對(duì)象,則需 要發(fā)布為遠(yuǎn)程對(duì)象。這樣服務(wù)器可以獲得有狀態(tài)的客戶端對(duì)象,其對(duì)此對(duì)象的操作會(huì)反饋 會(huì)客戶端。
[0151] 服務(wù)器端的調(diào)用結(jié)果如果是一個(gè)對(duì)象,則會(huì)再度發(fā)布為一個(gè)遠(yuǎn)程對(duì)象,將其引用 封裝為結(jié)果對(duì)象傳回客戶端??蛻舳丝梢赃M(jìn)行解析結(jié)果對(duì)象,獲得調(diào)用結(jié)果。
[0152] 客戶端和服務(wù)器端上的遠(yuǎn)程對(duì)象如果沒(méi)有被引用了,則會(huì)由Java的GC回收機(jī)制 來(lái)清理這些遠(yuǎn)程對(duì)象。當(dāng)一個(gè)對(duì)象生命周期結(jié)束了,系統(tǒng)中可能存在的殘留包括:遠(yuǎn)程主機(jī) 對(duì)此對(duì)象的引用、此對(duì)象上未完成的方法調(diào)用等。系統(tǒng)檢查到本地一個(gè)對(duì)象結(jié)束后,則會(huì)通 知遠(yuǎn)程主機(jī)該對(duì)象已經(jīng)無(wú)效,從而也對(duì)這些殘留對(duì)象進(jìn)行處理。
[0153] 連接建立過(guò)程:
[0154] 在本系統(tǒng)中,在客戶端和服務(wù)器端進(jìn)行連接和通信的時(shí)候,將這一過(guò)程分為了兩 部分:1)對(duì)象序列化部分;2)數(shù)據(jù)傳輸部分。其中,對(duì)象序列號(hào)部分的角色就是一個(gè)適配 器,而且它就是最終被外部使用的對(duì)象。在進(jìn)行遠(yuǎn)程過(guò)程調(diào)用的過(guò)程中,在傳輸參數(shù)的過(guò)程 中,對(duì)象被序列化,這樣就能通過(guò)網(wǎng)絡(luò)傳輸了。
[0155] -個(gè)連接的建立,存在兩個(gè)角色,連接的發(fā)起者和連接的接受者。連接的接受者需 要在建立連接之前就已經(jīng)處于監(jiān)聽(tīng)狀態(tài),等候連接的請(qǐng)求。而后連接發(fā)起者發(fā)起一個(gè)連接, 接受者接受該連接請(qǐng)求,兩端都相應(yīng)地獲得一個(gè)能傳輸字節(jié)流的連接對(duì)象。
[0156] 連接握手期:
[0157] 這一個(gè)階段的作用是確定通信雙方使用的序列化協(xié)議,并加載上響應(yīng)序列化組件 實(shí)例。
[0158] 首先是連接的發(fā)起端,查詢本機(jī)所支持的序列化協(xié)議,并將這些協(xié)議的名字按照 最期望使用到最不期望使用的順序排成一個(gè)序列。而后將該序列表示成元素逗號(hào)分隔得字 符串,并以UTF8編碼的方式(這一個(gè)時(shí)期內(nèi),后面的字符串傳輸都采用這種方式)將該字 符串(后帶一個(gè)回車(chē)換行符〈CRXLF〉)通過(guò)上一步中獲得的字節(jié)流連接發(fā)送給遠(yuǎn)程;而后 進(jìn)入讀取狀態(tài),等待對(duì)方發(fā)送回來(lái)的結(jié)果。
[0159]連接的接收端則以UTF8的方式從第一步獲得的流中讀取一行(到回車(chē)換行符〈CRXLF〉結(jié)束),而后將改行以逗號(hào)分隔的方式,取出其中的每一個(gè)元素;而后依次檢查 這每一個(gè)元素本機(jī)是否支持,直到找到第一個(gè)支持的為止。如果找到了支持的,則發(fā)回連 接的發(fā)起端一個(gè)字符串"ACCEPTED:〈SERIALIZATI0N_PR0T0C0L_NAME>",如果沒(méi)有找到支持 的,就往回發(fā)送"DENIED"字符串,兩種方式都以回車(chē)換行符〈CRXLF〉結(jié)尾。如果有找到支 持的協(xié)議,意味著相應(yīng)的連接是可以建立的,查找相應(yīng)的序列化組件,并在該連接上構(gòu)建他 的序列化組件實(shí)例。
[0160]連接發(fā)起端在接收端發(fā)送回來(lái)結(jié)果的時(shí)候。解析是否被遠(yuǎn)程接受,被接受的情況 下,所使用的序列化協(xié)議名字是什么,然后使用該協(xié)議在第一個(gè)時(shí)期獲得的連接上創(chuàng)建一 個(gè)序列化組件實(shí)例。如果連接被拒絕則回收第一個(gè)時(shí)期獲得的連接資源,并宣告連接失敗。
[0161] 通信期:
[0162]在完成連接建立期和連接握手期之后,就可以得到一個(gè)可以傳輸對(duì)象的通信連接 了,用于進(jìn)行方法調(diào)用中的數(shù)據(jù)包對(duì)象的傳遞。
[0163]假設(shè)遠(yuǎn)程進(jìn)程中存在一個(gè)對(duì)象a,本機(jī)上通過(guò)某種途徑獲取了該對(duì)象的一個(gè)遠(yuǎn)程 引用a'。然后在a'上執(zhí)行它所提供的某函數(shù)(假設(shè)為StringmethodOO),那么該函數(shù)的 執(zhí)行過(guò)程將會(huì)在遠(yuǎn)程的對(duì)象a上發(fā)生。方法調(diào)用的具體過(guò)程如表1所示:
[0164]
[0165]
[0166] 表 1
[0167] 本系統(tǒng)支持雙向的遠(yuǎn)程過(guò)程調(diào)用,S卩服務(wù)器端也可以去調(diào)用客戶端發(fā)布的遠(yuǎn)程對(duì) 象。具體步驟見(jiàn)圖6。
[0168] 這里描述的遠(yuǎn)程調(diào)用的過(guò)程中的兩個(gè)線程(客戶端調(diào)用該方法的線程和服務(wù)器 端為響應(yīng)該方法調(diào)用而啟動(dòng)的新線程),各自都有一個(gè)"棧"結(jié)構(gòu),一個(gè)在本機(jī)一個(gè)在遠(yuǎn)程。 但是這兩個(gè)"棧"中,只存在一個(gè)"活躍結(jié)點(diǎn)"。即,當(dāng)線程還是在運(yùn)行本機(jī)代碼的時(shí)候,"活 躍結(jié)點(diǎn)"就是當(dāng)前"棧"的"棧頂結(jié)點(diǎn)"。而當(dāng)調(diào)用了遠(yuǎn)程方法,當(dāng)前"棧"就進(jìn)入了暫停狀 態(tài),所以不再具備"活躍結(jié)點(diǎn)";而此時(shí)遠(yuǎn)程會(huì)出現(xiàn)一個(gè)新的線程執(zhí)行目標(biāo)函數(shù),該線程處于 活躍狀態(tài),所以獲得了 "活躍結(jié)點(diǎn)"。當(dāng)遠(yuǎn)程的函數(shù)執(zhí)行完畢時(shí),遠(yuǎn)程的線程消失,而本機(jī)的 線程恢復(fù)執(zhí)行過(guò)程,所以本機(jī)的線程又重新獲得了 "活躍結(jié)點(diǎn)"。所以這個(gè)過(guò)程可以認(rèn)為是 "活躍結(jié)點(diǎn)"在本機(jī)和遠(yuǎn)程之間發(fā)生了轉(zhuǎn)移。從這一角度看,遠(yuǎn)程過(guò)程調(diào)用就非常像本地方 法調(diào)用,只不過(guò)發(fā)生了調(diào)用棧的轉(zhuǎn)移。具體如圖7所示。
[0169] 在對(duì)遠(yuǎn)程過(guò)程調(diào)用過(guò)程中,會(huì)涉及到很多的引用類(lèi)型的對(duì)象作為參數(shù)。源端會(huì)傳 輸給另一端相應(yīng)的遠(yuǎn)程對(duì)象,最終另一端在引用對(duì)象上的操作,都會(huì)通過(guò)這一套遠(yuǎn)程對(duì)象 方法調(diào)用機(jī)制重新作用在原對(duì)象上。如圖8所示,帶有引用對(duì)象作為參數(shù)的遠(yuǎn)程過(guò)程調(diào)用 步驟為:
[0170] 1)客戶端在發(fā)起對(duì)服務(wù)器的遠(yuǎn)程過(guò)程調(diào)用時(shí),先在客戶端檢查方法中的所有參 數(shù),如果有以"OByRef"作為注解的對(duì)象,則將此對(duì)象發(fā)布為遠(yuǎn)程對(duì)象;
[0171] 2)客戶端通過(guò)網(wǎng)絡(luò)連接將方法調(diào)用請(qǐng)求發(fā)送到遠(yuǎn)程服務(wù)器端;
[0172] 3)服務(wù)器端接收到方法調(diào)用請(qǐng)求時(shí),掃描所有的參數(shù),并將其中作為引用傳輸?shù)?參數(shù)用相應(yīng)的遠(yuǎn)程對(duì)象代替;
[0173] 4)服務(wù)器端繼續(xù)按照正常的過(guò)程執(zhí)行該來(lái)自客戶端的方法調(diào)用;
[0174] 5)服務(wù)器端完成方法調(diào)用之后,從本機(jī)搜集結(jié)果并判斷是否需要引用的方式傳遞 會(huì)客戶端。如果結(jié)果只是一個(gè)數(shù)據(jù),則直接返回即可。如果結(jié)果是一個(gè)引用對(duì)象,則也同樣 需要將此對(duì)象發(fā)布,然后遠(yuǎn)程引用傳回給客戶端。
[0175] 6)客戶端收到來(lái)自服務(wù)器的結(jié)果之后,根據(jù)此結(jié)果的類(lèi)型,而進(jìn)行不同的解析過(guò) 程。如果是引用,則是將遠(yuǎn)程引用返回給用戶,從而還可以進(jìn)行對(duì)此對(duì)象的遠(yuǎn)程訪問(wèn)。
[0176] 結(jié)束期:
[0177] 當(dāng)通信工作完成的時(shí)候,或者是不可恢復(fù)的通信異常(比如網(wǎng)絡(luò)斷了,串口松開(kāi) 了)的時(shí)候,該通信的連接就會(huì)將進(jìn)入斷開(kāi)階段。
[0178] 進(jìn)入連接斷開(kāi)階段之后,序列化組件對(duì)象將向底層的連接對(duì)象發(fā)送一個(gè)關(guān)閉連接 的請(qǐng)求。連接對(duì)象收到該請(qǐng)求之后,將會(huì)把信息告訴遠(yuǎn)程的連接對(duì)象,而后關(guān)閉連接。連接 一旦關(guān)閉,該連接對(duì)象上將不能再傳輸任何信息,在它上面做的任何讀寫(xiě)操作都將拋出異 常,該異常將會(huì)沿著序列化組件對(duì)象傳遞給上層的使用者。
[0179] 此時(shí),也需要將遠(yuǎn)程對(duì)象進(jìn)行善后處理。如圖9所示,當(dāng)一端的對(duì)象生命周期結(jié) 束時(shí)(比如通過(guò)檢測(cè)GC的對(duì)象回收過(guò)程),通過(guò)某種方式獲取到相應(yīng)的標(biāo)識(shí)符,然后通知遠(yuǎn) 程主機(jī)該對(duì)象已經(jīng)無(wú)效,遠(yuǎn)程主機(jī)收到此消息后,也作相應(yīng)的處理。
[0180] 如圖10所示,本發(fā)明所述RPC組件的全部過(guò)程流程圖具體步驟如下:
[0181] 步驟1 :服務(wù)器準(zhǔn)備好進(jìn)行監(jiān)聽(tīng);
[0182] 步驟2 :客戶端發(fā)出連接請(qǐng)求,服務(wù)器接收,確定連接握手,確定雙方通信序列化 協(xié)議,并在客戶端和服務(wù)器上加載響應(yīng)序列化組件實(shí)例;
[0183] 步驟3:服務(wù)器發(fā)表遠(yuǎn)程對(duì)象(例如:對(duì)象a);
[0184] 步驟4:客戶端獲得對(duì)應(yīng)遠(yuǎn)程對(duì)象的遠(yuǎn)程引用對(duì)象(例如:對(duì)象a,);
[0185] 步驟5:客戶端調(diào)用a,.method()方法,掃描參數(shù);
[0186] 步驟6 :客戶端判斷參數(shù)中是否有引用對(duì)象,如果是,執(zhí)行步驟7 ;否則,執(zhí)行步驟 8 ;
[0187] 步驟7 :客戶端將此參數(shù)發(fā)布為遠(yuǎn)程對(duì)
當(dāng)前第4頁(yè)1 2 3 4 5 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
谷城县| 平顺县| 德江县| 宝坻区| 沙田区| 平江县| 焉耆| 宝丰县| 科技| 扬州市| 贵港市| 昭通市| 新龙县| 横山县| 达孜县| 巫溪县| 鄢陵县| 武邑县| 江油市| 定边县| 织金县| 乌拉特中旗| 饶平县| 华阴市| 获嘉县| 乌拉特前旗| 湛江市| 合山市| 扬州市| 大足县| 稷山县| 涟水县| 舟曲县| 张家界市| 华宁县| 新河县| 天台县| 达尔| 离岛区| 沂水县| 桐乡市|