專利名稱:一種實現(xiàn)遠程調用的方法和系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及計算機網(wǎng)絡技術領域,特別是涉及一種遠程調用的方法和系統(tǒng)。
背景技術:
不同計算機、不同進程的通信是構建軟件系統(tǒng)的重要計數(shù),目前的計算機領域中 有很多遠程過程調用(RPC,Remote Procedure Call Protocol)的相關技術,比如跨平臺的 Web krvice,局限于操作系統(tǒng)特性或語言特性的如COM+,.Net Remoting,JMI等。隨著互 聯(lián)網(wǎng)系統(tǒng)的日益復雜,對穩(wěn)定的、易描述的、跨平臺、跨語言、高效的遠程過程調用協(xié)議有著 很強烈的需求。
發(fā)明內容
本發(fā)明提供了一種實現(xiàn)遠程調用的方法和系統(tǒng),本發(fā)明的技術方案提供了一種穩(wěn) 定的、易描述的、跨平臺的、跨語言的、高效的遠程調用方式。為達到上述目的,本發(fā)明的技術方案是這樣實現(xiàn)的本發(fā)明公開了一種實現(xiàn)遠程調用的方法,客戶端和服務器端均從上至下分為四 層應用層、協(xié)議抽象層、協(xié)議信道實現(xiàn)層和物理通信層;其中,協(xié)議信道實現(xiàn)層包含多種 協(xié)議通道,則客戶端遠程調用服務器的過程包括客戶端應用層調用客戶端協(xié)議抽象層,向客戶端協(xié)議抽象層傳入目的服務器信息 和調用數(shù)據(jù)形成調用請求消息;客戶端協(xié)議抽象層根據(jù)服務器信息中的目的服務器地址, 從客戶端協(xié)議信道實現(xiàn)層所包含的多個協(xié)議通道中選擇一個協(xié)議通道;所述選擇的協(xié)議通 道在所述調用請求消息中填充客戶端信息,并進行打包處理后發(fā)送給客戶端物理通信層; 客戶端物理通信層將所述調用請求消息通過網(wǎng)絡發(fā)送給服務器端;服務器端物理通信層將所接收到的調用請求消息發(fā)送給服務器端對應的協(xié)議信 道;所述對應的協(xié)議信道對調用請求消息進行解包處理后發(fā)送給服務器端協(xié)議抽象層;服 務器端協(xié)議抽象層將調用請求消息中的目的服務器信息和調用數(shù)據(jù)發(fā)送給服務器端應用 層;服務器端應用層根據(jù)所接收的信息實現(xiàn)服務器端應用,生成應答數(shù)據(jù),將應答數(shù)據(jù)傳入 服務器端協(xié)議抽象層;服務器端協(xié)議抽象層,對應答數(shù)據(jù)進行封裝,形成調用應答消息,并 發(fā)送給服務器端對應的協(xié)議通道;服務器端的對應協(xié)議通道將調用應答消息進行打包處理 后,再由服務器端的物理通信層將調用應答消息沿原連接發(fā)送給客戶端;客戶端物理通信層將所接收到的調用應答消息發(fā)送給客戶端協(xié)議信道實現(xiàn)層中 的對應協(xié)議通道,該對應協(xié)議通道對調用應答消息進行解包處理后發(fā)送給客戶端協(xié)議抽象 層;客戶端協(xié)議抽象層將調用應答消息中的應答數(shù)據(jù)發(fā)送給客戶端應用層。本發(fā)明還公開了一種實現(xiàn)遠程調用的系統(tǒng),包括客戶端和服務器;客戶端包括 客戶端應用層模塊、客戶端協(xié)議抽象層模塊、客戶端協(xié)議信道實現(xiàn)層模塊和客戶端物理通 信層模塊;服務器包括服務器端應用層模塊、服務器端協(xié)議抽象層模塊、服務器端協(xié)議信 道實現(xiàn)層模塊和服務器端物理通信層模塊;其中客戶端協(xié)議信道實現(xiàn)層模塊和服務器端協(xié)議信道實現(xiàn)層模塊分別包括多個協(xié)議通道子模塊;客戶端應用層模塊,用于調用客戶端協(xié)議抽象層模塊,向客戶端協(xié)議抽象層模塊 傳入目的服務器信息和調用數(shù)據(jù)形成調用請求消息;用于接收客戶端協(xié)議抽象層模塊返回 的應答數(shù)據(jù);客戶端協(xié)議抽象層模塊,用于根據(jù)服務器信息中的目的服務器地址,從客戶端協(xié) 議信道實現(xiàn)層模塊所包含的多個協(xié)議通道子模塊中選擇一個協(xié)議通道子模塊,將所選擇的 調用請求消息發(fā)送給所選擇的協(xié)議通道子模塊;用于將所述協(xié)議通道子模塊返回的調用應 答消息中的應答數(shù)據(jù)發(fā)送給客戶端應用層模塊;客戶端協(xié)議信道實現(xiàn)層模塊中的協(xié)議通道子模塊,用于在所述調用請求消息中填 充客戶端信息,并進行打包處理后發(fā)送給客戶端物理通信層模塊,用于將客戶端物理通信 層模塊返回的調用應答消息進行解包處理后發(fā)送給客戶端協(xié)議抽象層模塊;客戶端物理通信層模塊,用于將所述調用請求消息通過網(wǎng)絡發(fā)送給服務器端;用 于將服務器端返回的調用應答消息發(fā)送給客戶端協(xié)議信道實現(xiàn)層模塊中的對應協(xié)議通道 子模塊;服務器端物理通信層模塊,用于將所接收到的調用請求消息發(fā)送給服務器端協(xié)議 信道實現(xiàn)層模塊中的對應協(xié)議信道子模塊;用于將對應協(xié)議信道子模塊返回的調用應答消 息沿原連接發(fā)送給客戶端;服務器端協(xié)議信道實現(xiàn)層模塊中的對應協(xié)議信道子模塊,用于對調用請求消息進 行解包處理后發(fā)送給服務器端協(xié)議抽象層模塊,并用于對服務器端協(xié)議抽象層模塊返回的 調用應答消息進行打包處理后發(fā)送給服務器端物理通信層模塊;服務器端協(xié)議抽象層模塊,用于將調用請求消息中的目的服務器信息和調用數(shù)據(jù) 發(fā)送給服務器端應用層模塊;用于對服務器端應用層模塊返回的應答數(shù)據(jù)進行封裝,形成 調用應答消息,并發(fā)送給對應的協(xié)議通道子模塊;服務器端應用層模塊,用于根據(jù)所接收的信息實現(xiàn)服務器端應用,生成應答數(shù)據(jù), 將應答數(shù)據(jù)傳入服務器端協(xié)議抽象層模塊。由上述可見,本發(fā)明這種客戶端和服務器端均從上至下分為四層應用層、協(xié)議抽 象層、協(xié)議信道實現(xiàn)層和物理通信層,其中協(xié)議信道實現(xiàn)層針對不同協(xié)議的通信打包和解 包,協(xié)議抽象層將地層的具體協(xié)議與上層的應用隔離開的技術方案,為目前的需求提供了 一種穩(wěn)定的、易描述的、跨平臺、跨語言、高效的遠程調用方案。
圖1是本發(fā)明實施例中的一種實現(xiàn)遠程調用的方法的示意圖;圖2是本發(fā)明中的一種實現(xiàn)遠程調用的系統(tǒng)的組成結構示意圖。
具體實施例方式為了使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面結合附圖和具體實施例對 本發(fā)明進行詳細描述。圖1是本發(fā)明實施例中的一種實現(xiàn)遠程調用的方法的示意圖。如圖1所示,客戶 端和服務器端均從上至下分為四層應用層、協(xié)議抽象層、協(xié)議信道實現(xiàn)層和物理通信層;其中,協(xié)議信道實現(xiàn)層包含多種協(xié)議通道,如傳輸控制協(xié)議(TCP)通道、超文本傳輸協(xié)議 (HTTP)通道和管道(Pipe)通信協(xié)議通道。最下層的物理通信層,由操作系統(tǒng)支持,主流操作系統(tǒng)(Windows,Linux, Unix)均 支持tcp,http,namedpipe等通信協(xié)議,在不同的平臺中可以選擇適合自己的平臺的通信 協(xié)議,本發(fā)明中提供了 TCP、HTTP和Pipe等多種通信協(xié)議的支持,以面對不同的網(wǎng)絡環(huán)境或 應用場景。協(xié)議信道實現(xiàn)層,實現(xiàn)針對不同協(xié)議(TCP,HTTP, Pipe)的通信打包、解包,用于 將客戶端應用的數(shù)據(jù)打包并通過物理通信層將數(shù)據(jù)發(fā)送至服務器端,并接受返回的應答數(shù) 據(jù)。協(xié)議抽象層通過封裝將底層的具體協(xié)議與上層應用隔離開,通過封裝提供與通信 層無關的接口給應用開發(fā)者,這樣充分保留了遠程過程調用(RPC)的靈活性。由于協(xié)議抽象層通過封裝將底層的具體協(xié)議與上層應用隔離開了,因此應用層可 以用不同的語言開發(fā)代碼庫,如可以采用Java,C#, C, php等幾個主流開發(fā)語言開發(fā)代碼 庫,并實現(xiàn)各種語言之間的調用兼容性,而不會受到開發(fā)語言的限制??蛻舳藨脤又苯邮褂梅庋b好的協(xié)議抽象層的代碼調用服務器端,服務器端直接 使用協(xié)議抽象層提供的框架代碼實現(xiàn)服務器端應用。則客戶端遠程調用服務器的過程包括1)客戶端應用層調用客戶端協(xié)議抽象層,向客戶端協(xié)議抽象層傳入目的服務器 信息和調用數(shù)據(jù)形成調用請求消息;客戶端協(xié)議抽象層根據(jù)服務器信息中的目的服務器地 址,從客戶端協(xié)議信道實現(xiàn)層所包含的多個協(xié)議通道中選擇一個協(xié)議通道;所述被選擇的 協(xié)議通道在所述調用請求消息中填充客戶端信息,并進行打包處理后發(fā)送給客戶端物理通 信層;客戶端物理通信層將所述調用請求消息通過網(wǎng)絡發(fā)送給服務器端;這里,客戶端物理通信層可以將所述調用請求消息發(fā)送給業(yè)務代理網(wǎng)關服務器; 業(yè)務代理網(wǎng)關服務器根據(jù)所述調用請求消息中的上下文定為標識,將所述調用請求消息路 由到目的服務器。后續(xù)會對這部分進行描述描述。2)服務器端物理通信層將所接收到的調用請求消息發(fā)送給服務器端對應的協(xié)議 信道;所述對應的協(xié)議信道對調用請求消息進行解包處理后發(fā)送給服務器端協(xié)議抽象層; 服務器端協(xié)議抽象層將調用請求消息中的目的服務器信息和調用數(shù)據(jù)發(fā)送給服務器端應 用層;服務器端應用層根據(jù)所接收的信息實現(xiàn)服務器端應用,生成應答數(shù)據(jù),將應答數(shù)據(jù)傳 入服務器端協(xié)議抽象層;服務器端協(xié)議抽象層,對應答數(shù)據(jù)進行封裝,形成調用應答消息, 并發(fā)送給服務器端對應的協(xié)議通道;服務器端的對應協(xié)議通道將調用應答消息進行打包處 理后,再由服務器端的物理通信層將調用應答消息沿原連接發(fā)送給客戶端;3)客戶端物理通信層將所接收到的調用應答消息發(fā)送給客戶端協(xié)議信道實現(xiàn)層 中的對應協(xié)議通道,該對應協(xié)議通道對調用應答消息進行解包處理后發(fā)送給客戶端協(xié)議抽 象層;客戶端協(xié)議抽象層將調用應答消息中的應答數(shù)據(jù)發(fā)送給客戶端應用層。本發(fā)明的技術方案提供了一種抽象描述遠程接口(Rpclnterfance)及遠程調用 消息(RpcMessage)的方式,具體描述如下服務器提供的遠程接口可以包含多個名字唯一 的服務接口(即多個服務接口中每個服務器接口的名字都是唯一的),每個服務接口可以 包含多個服務方法,每個服務方法包含輸入?yún)?shù)類型和輸出參數(shù)類型。在本發(fā)明的一個實
7施例中,輸入?yún)?shù)類型及輸出參數(shù)類型的定義通過“I^otocol Buffers”方式進行,所有接 口為強類型聲明,在客戶端和服務器端均可加入類型檢查機制。在本發(fā)明的一個實施例中,遠程調用對象的調用請求消息包含如下信息來 源服務名稱、來源服務器主機名,目的服務接口名,目的服務方法名,上下文定位標識 (Contexttoi),調用包體數(shù)據(jù)和調用請求消息可選項。其中,目的服務接口名,目的服務方 法名和上下文定位標識是服務器信息,來源服務名稱、來源服務器主機名是客戶端信息,調 用包體數(shù)據(jù)是具體的調用數(shù)據(jù),調用請求消息可選項是一個標志位,如果該位有效,則表示 該消息是調用請求消息。調用應答消息包括應答碼、返回的調用應答數(shù)據(jù)和調用應道消息 可選性。在Http通信中包體格式如下;調用請求消息POST rpc. do ? s = service-name&m = method-name HTTP/1. 1User-Agent :serviceicomputerCookie :to = context-uriContent-Type :multipart/byterangesContent-Length content-length-value<body-data>上述調用請求消息格式的說明如表1所示
權利要求
1.一種實現(xiàn)遠程調用的方法,其特征在于,客戶端和服務器端均從上至下分為四層 應用層、協(xié)議抽象層、協(xié)議信道實現(xiàn)層和物理通信層;其中,協(xié)議信道實現(xiàn)層包含多種協(xié)議 通道,則客戶端遠程調用服務器的過程包括客戶端應用層調用客戶端協(xié)議抽象層,向客戶端協(xié)議抽象層傳入目的服務器信息和調 用數(shù)據(jù)形成調用請求消息;客戶端協(xié)議抽象層根據(jù)服務器信息中的目的服務器地址,從客 戶端協(xié)議信道實現(xiàn)層所包含的多個協(xié)議通道中選擇一個協(xié)議通道;所述被選擇的協(xié)議通道 在所述調用請求消息中填充客戶端信息,并進行打包處理后發(fā)送給客戶端物理通信層;客 戶端物理通信層將所述調用請求消息通過網(wǎng)絡發(fā)送給服務器端;服務器端物理通信層將所接收到的調用請求消息發(fā)送給服務器端對應的協(xié)議信道;所 述對應的協(xié)議信道對調用請求消息進行解包處理后發(fā)送給服務器端協(xié)議抽象層;服務器端 協(xié)議抽象層將調用請求消息中的目的服務器信息和調用數(shù)據(jù)發(fā)送給服務器端應用層;服務 器端應用層根據(jù)所接收的信息實現(xiàn)服務器端應用,生成應答數(shù)據(jù),將應答數(shù)據(jù)傳入服務器 端協(xié)議抽象層;服務器端協(xié)議抽象層,對應答數(shù)據(jù)進行封裝,形成調用應答消息,并發(fā)送給 服務器端對應的協(xié)議通道;服務器端的對應協(xié)議通道將調用應答消息進行打包處理后,再 由服務器端的物理通信層將調用應答消息沿原連接發(fā)送給客戶端;客戶端物理通信層將所接收到的調用應答消息發(fā)送給客戶端協(xié)議信道實現(xiàn)層中的對 應協(xié)議通道,該對應協(xié)議通道對調用應答消息進行解包處理后發(fā)送給客戶端協(xié)議抽象層; 客戶端協(xié)議抽象層將調用應答消息中的應答數(shù)據(jù)發(fā)送給客戶端應用層。
2.根據(jù)權利要求1所述的方法,其特征在于,所述目的服務器信息包括目的服務接口名、目的服務方法名;目的服務器提供的遠 程接口中包含多個名字唯一的服務接口,每個服務接口包含多個服務方法; 所述客戶端信息包括來源服務名稱和來源服務器主機名稱; 協(xié)議信道實現(xiàn)層包含傳輸控制協(xié)議TCP通道、超文本傳輸協(xié)議HTTP通道和管道通信 協(xié)議通道。
3.根據(jù)權利要求1所述的方法,其特征在于, 所述目的服務器信息還包括上下文定為標識;客戶端物理通信層將所述調用請求消息通過網(wǎng)絡發(fā)送給服務器端包括客戶端物理通 信層將所述調用請求消息發(fā)送給業(yè)務代理網(wǎng)關服務器;業(yè)務代理網(wǎng)關服務器根據(jù)所述調用 請求消息中的上下文定為標識,將所述調用請求消息路由到目的服務器。
4.根據(jù)權利要求1至3中任一項所述的方法,其特征在于,該方法進一步包括 服務器與客戶端建立雙工連接,將客戶端加入服務器的會話列表中;服務器從會話列表中選擇特定的客戶端,并向該客戶端發(fā)送遠程調用信令;客戶端接 收遠程調用信令并處理。
5.根據(jù)權利要求4所述的方法,其特征在于,所述服務器與客戶端建立雙工連接包括 服務器啟動一個雙工連接服務,并開始監(jiān)聽;客戶端啟動一個客戶端應用,并開始連接服務器;連接成功后,客戶端向服務器發(fā)送注冊命令;服務器根據(jù)注冊命令進行鑒權,鑒權成功后,與客戶端建立雙工連接。
6.一種實現(xiàn)遠程調用的系統(tǒng),其特征在于,該系統(tǒng)包括客戶端和服務器;其中,客戶端包括客戶端應用層模塊、客戶端協(xié)議抽象層模塊、客戶端協(xié)議信道實現(xiàn)層模塊和客戶端物 理通信層模塊;服務器包括服務器端應用層模塊、服務器端協(xié)議抽象層模塊、服務器端協(xié) 議信道實現(xiàn)層模塊和服務器端物理通信層模塊;其中客戶端協(xié)議信道實現(xiàn)層模塊和服務器 端協(xié)議信道實現(xiàn)層模塊分別包括多個協(xié)議通道子模塊;客戶端應用層模塊,用于調用客戶端協(xié)議抽象層模塊,向客戶端協(xié)議抽象層模塊傳入 目的服務器信息和調用數(shù)據(jù)形成調用請求消息;用于接收客戶端協(xié)議抽象層模塊返回的應 答數(shù)據(jù);客戶端協(xié)議抽象層模塊,用于根據(jù)服務器信息中的目的服務器地址,從客戶端協(xié)議信 道實現(xiàn)層模塊所包含的多個協(xié)議通道子模塊中選擇一個協(xié)議通道子模塊,將所選擇的調用 請求消息發(fā)送給所選擇的協(xié)議通道子模塊;用于將所述協(xié)議通道子模塊返回的調用應答消 息中的應答數(shù)據(jù)發(fā)送給客戶端應用層模塊;客戶端協(xié)議信道實現(xiàn)層模塊中的協(xié)議通道子模塊,用于在所述調用請求消息中填充客 戶端信息,并進行打包處理后發(fā)送給客戶端物理通信層模塊,用于將客戶端物理通信層模 塊返回的調用應答消息進行解包處理后發(fā)送給客戶端協(xié)議抽象層模塊;客戶端物理通信層模塊,用于將所述調用請求消息通過網(wǎng)絡發(fā)送給服務器端;用于將 服務器端返回的調用應答消息發(fā)送給客戶端協(xié)議信道實現(xiàn)層模塊中的對應協(xié)議通道子模 塊;服務器端物理通信層模塊,用于將所接收到的調用請求消息發(fā)送給服務器端協(xié)議信道 實現(xiàn)層模塊中的對應協(xié)議信道子模塊;用于將對應協(xié)議信道子模塊返回的調用應答消息沿 原連接發(fā)送給客戶端;服務器端協(xié)議信道實現(xiàn)層模塊中的對應協(xié)議信道子模塊,用于對調用請求消息進行解 包處理后發(fā)送給服務器端協(xié)議抽象層模塊,并用于對服務器端協(xié)議抽象層模塊返回的調用 應答消息進行打包處理后發(fā)送給服務器端物理通信層模塊;服務器端協(xié)議抽象層模塊,用于將調用請求消息中的目的服務器信息和調用數(shù)據(jù)發(fā)送 給服務器端應用層模塊;用于對服務器端應用層模塊返回的應答數(shù)據(jù)進行封裝,形成調用 應答消息,并發(fā)送給對應的協(xié)議通道子模塊;服務器端應用層模塊,用于根據(jù)所接收的信息實現(xiàn)服務器端應用,生成應答數(shù)據(jù),將應 答數(shù)據(jù)傳入服務器端協(xié)議抽象層模塊。
7.根據(jù)權利要求6所述的系統(tǒng),其特征在于,所述目的服務器信息包括目的服務接口名、目的服務方法名;目的服務器提供的遠 程接口中包含多個名字唯一的服務接口,每個服務接口包含多個服務方法; 所述客戶端信息包括來源服務名稱和來源服務器主機名稱; 協(xié)議信道實現(xiàn)層模塊包括傳輸控制協(xié)議TCP通道子模塊、超文本傳輸協(xié)議HTTP通道 子模塊和管道通信協(xié)議通道子模塊。
8.根據(jù)權利要求6所述的系統(tǒng),其特征在于,該系統(tǒng)還包括業(yè)務代理網(wǎng)關服務器; 所述目的服務器信息還包括上下文定為標識;所述客戶端物理通信層模塊將所述調用請求消息發(fā)送給業(yè)務代理網(wǎng)關服務器;業(yè)務代 理網(wǎng)關服務器根據(jù)所述調用請求消息中的上下文定為標識,將所述調用請求消息路由到目 的服務器。
9.根據(jù)權利要求6至8中任一項所述的系統(tǒng),其特征在于,服務器進一步用于與客戶端建立雙工連接,將客戶端加入服務器的會話列表中; 服務器進一步用于從會話列表中選擇特定的客戶端,并向該客戶端發(fā)送遠程調用信 令;客戶端接收遠程調用信令并處理。
10.根據(jù)權利要求9所述的系統(tǒng),其特征在于,所述服務器與客戶端建立雙工連接包括服務器啟動一個雙工連接服務,并開始監(jiān)聽; 客戶端啟動一個客戶端應用,并開始連接服務器; 連接成功后,客戶端向服務器發(fā)送注冊命令; 服務器根據(jù)注冊命令進行鑒權,鑒權成功后,與客戶端建立雙工連接。
全文摘要
本發(fā)明公開了一種實現(xiàn)遠程調用的方法和系統(tǒng)。本發(fā)明這種客戶端和服務器端均從上至下分為四層應用層、協(xié)議抽象層、協(xié)議信道實現(xiàn)層和物理通信層,其中協(xié)議信道實現(xiàn)層針對不同協(xié)議的通信打包和解包,協(xié)議抽象層將底層的具體協(xié)議與上層的應用隔離開的技術方案,為目前的需求提供了一種穩(wěn)定的、易描述的、跨平臺、跨語言、高效的遠程調用方案。
文檔編號H04L29/06GK102098296SQ20101061192
公開日2011年6月15日 申請日期2010年12月29日 優(yōu)先權日2010年12月29日
發(fā)明者高磊 申請人:北京新媒傳信科技有限公司