這幾天分析一個(gè)我接手的系統(tǒng),是一個(gè)典型的分布式系統(tǒng)。其中有特色的技術(shù)就是采用了webservice,
webservice從字面上分解就是web
service----一個(gè)提供web服務(wù)的系統(tǒng),可以通過web方式訪問這些服務(wù)。
而從現(xiàn)實(shí)中,webservice可以說是一套標(biāo)準(zhǔn):分布式,跨平臺(tái),跨語言等;
標(biāo)準(zhǔn)實(shí)現(xiàn)采用SOAP協(xié)議,SOAP
協(xié)議是基于流行的XML表達(dá)的,具有一個(gè)套封envlope,
envlope里包含一個(gè)必須的body和一個(gè)可選的head;
就是在這個(gè)body里,我們聲明了訪問的方法、方法的參數(shù)或返回值。
webservice實(shí)現(xiàn),
C++系統(tǒng)上采用開源的gSoap,而java采用apache的Axis。這兩個(gè)框架都提供工具來
生成C++代碼或Java代碼,不管是gSoap或者Axis,他們生成的最終代碼,客戶端只需要調(diào)用簡(jiǎn)單的對(duì)象就
可以訪問服務(wù)器,而服務(wù)器生成一樣的接口,開發(fā)者實(shí)現(xiàn)這些接口就行,中間的通訊過程全部由框架解決了。
其實(shí)這種技術(shù)架構(gòu)并不新穎,早期的CORBA和DCOM,
后來java的RMI,
這些基本上都是RPC技術(shù),大同
小異而已。而它們的背后設(shè)計(jì)模式,可以說就是23種模式之一的代理模式Proxy。簡(jiǎn)言之就是,一個(gè)客戶不想
或者不能直接引用一個(gè)對(duì)象(接口),而代理對(duì)象(接口)可以在客戶端和目標(biāo)對(duì)象之間起到中介作用。
按目的劃分代理模式有8種:
1、遠(yuǎn)程代理:為位于不同的地址空間的對(duì)象提供一個(gè)局域代表對(duì)象
2、虛擬代理:根據(jù)需要?jiǎng)?chuàng)建一個(gè)資源消耗較大的對(duì)象,使得此對(duì)象只在需要時(shí)才會(huì)被真正創(chuàng)建
3、Copy-on-Write代理:把復(fù)制拖延到只有在客戶需要時(shí)才真正采取行動(dòng)
4、保護(hù)代理:控制對(duì)象的訪問,提供使用權(quán)限檢查
5、Cache代理:為某個(gè)目標(biāo)操作的結(jié)果提供臨時(shí)的存儲(chǔ)空間,以便多客戶共享
6、防火墻代理:保護(hù)目標(biāo),防止惡意用戶
7、同步化代理:能同時(shí)訪問對(duì)象而沒有沖突
8、智能引用代理:提供一些額外操作,如訪問次數(shù)統(tǒng)計(jì)
顯然RPC方式屬于第1種遠(yuǎn)程代理模式。
可以看出,在面對(duì)一種技術(shù)時(shí),我們從它的定義、實(shí)現(xiàn)、引入目的、類似相關(guān)技術(shù)、背后理論基礎(chǔ)來
細(xì)細(xì)分析,就比較容易掌握了。