RPC:Remote Produce Call 是這幾個(gè)單詞的縮寫(xiě)。
我們直譯過(guò)來(lái)就是遠(yuǎn)程過(guò)程調(diào)用。對(duì),這種技術(shù)是實(shí)現(xiàn)遠(yuǎn)端的過(guò)程調(diào)用,遠(yuǎn)端意味著跨主機(jī)、可能跨平臺(tái)、跨網(wǎng)絡(luò)、跨進(jìn)程是毫無(wú)疑問(wèn)的事情了,所以我們也可以使用RPC技術(shù)來(lái)實(shí)現(xiàn)本機(jī)上一個(gè)進(jìn)程中方法調(diào)用另一個(gè)進(jìn)程中的方法。使用這種技術(shù)客戶機(jī)可以調(diào)用遠(yuǎn)端的服務(wù)器來(lái)執(zhí)行工作,執(zhí)行完后把結(jié)果集返回來(lái)。但是這種復(fù)雜性對(duì)用戶來(lái)說(shuō)是透明的,用戶可以是系統(tǒng)的使用者,也可能是開(kāi)發(fā)高層應(yīng)用邏輯的開(kāi)發(fā)員。
RPC是怎么工作的呢?我就在下面做了個(gè)草圖來(lái)表達(dá)一下。以一個(gè)Hello過(guò)程來(lái)描述。
Client Server
Hello
|
|
|
|
Hello |
Client Stub |
|
|
|
Server Stub |
Client Runtime Liberary |
|
|
|
Server RuntimeLiberary |
Transport |
|
|
|
Transport |
客戶調(diào)用過(guò)程如下:
1:客戶端應(yīng)用程序在客戶機(jī)發(fā)出方法調(diào)用Hello。
2:Client Stub接受應(yīng)用程序的方法調(diào)用,并把請(qǐng)求、數(shù)據(jù)組織成標(biāo)準(zhǔn)格式給Client Runtime Liberary層。
3:Client Runtime Liberary通過(guò)指定的通道(可能是管理、網(wǎng)絡(luò)等)發(fā)送數(shù)據(jù)及請(qǐng)求。
服務(wù)接收過(guò)程如下:
1:Server RuntimeLiberary負(fù)責(zé)實(shí)時(shí)地從網(wǎng)絡(luò)接收數(shù)據(jù)、請(qǐng)求。把它交給Server Stub。
2:Server Stub 負(fù)責(zé)把數(shù)據(jù)譯成本地格式并進(jìn)一步調(diào)用應(yīng)用程序?qū)崿F(xiàn)的服務(wù)。
3:執(zhí)行服務(wù)Hello.打印出"Hello World" 。
服務(wù)端服務(wù)執(zhí)行完后的返回過(guò)程:
1:服務(wù)把返回?cái)?shù)據(jù)給Server Stub 。
2:Server Stub 把數(shù)據(jù)轉(zhuǎn)換成標(biāo)準(zhǔn)格式給Server RuntimeLiberary。
3:Server RuntimeLiberary 則向客戶方發(fā)送結(jié)果數(shù)據(jù)。
客戶方的接受過(guò)程
1:Client Runtime Liberary接受數(shù)據(jù)交給Client Runtime Liberary。
2:Client Runtime Liberary把標(biāo)準(zhǔn)格式的數(shù)據(jù)譯成本機(jī)、本地語(yǔ)言(是開(kāi)發(fā)語(yǔ)言)的數(shù)據(jù)。并進(jìn)而交給客戶程序。
3:客戶程序收到服務(wù)端處理后的信息了。客戶如何利用這個(gè)信息呢?哦!這是他的事...................
RPC模型最初是由SUN公司提出來(lái)的,到在現(xiàn)在有多種RPC模型。我這里將要討論的RPC知識(shí)是microsoft RPC模型。