Java遠(yuǎn)程通訊可選技術(shù)及原理
在分布式服務(wù)框架中,一個(gè)最基礎(chǔ)的問(wèn)題就是遠(yuǎn)程服務(wù)是怎么通訊的,在Java領(lǐng)域中有很多可實(shí)現(xiàn)遠(yuǎn)程通訊的技術(shù),例如:RMI、MINA、ESB、 Burlap、Hessian、SOAP、EJB和JMS等,這些名詞之間到底是些什么關(guān)系呢,它們背后到底是基于什么原理實(shí)現(xiàn)的呢,了解這些是實(shí)現(xiàn)分布式服務(wù)框架的基礎(chǔ)知識(shí),而如果在性能上有高的要求的話,那深入了解這些技術(shù)背后的機(jī)制就是必須的了,在這篇blog中我們將來(lái)一探究竟,拋磚引玉,歡迎大家提供更多的實(shí)現(xiàn)遠(yuǎn)程通訊的技術(shù)和原理的介紹。
基本原理
要實(shí)現(xiàn)網(wǎng)絡(luò)機(jī)器間的通訊,首先得來(lái)看看計(jì)算機(jī)系統(tǒng)網(wǎng)絡(luò)通信的基本原理,在底層層面去看,網(wǎng)絡(luò)通信需要做的就是將流從一臺(tái)計(jì)算機(jī)傳輸?shù)搅硗庖慌_(tái)計(jì)算機(jī),基于傳輸協(xié)議和網(wǎng)絡(luò)IO來(lái)實(shí)現(xiàn),其中傳輸協(xié)議比較出名的有http、tcp、udp等等,http、tcp、udp都是在基于Socket概念上為某類(lèi)應(yīng)用場(chǎng)景而擴(kuò)展出的傳輸協(xié)議,網(wǎng)絡(luò)IO,主要有bio、nio、aio三種方式,所有的分布式應(yīng)用通訊都基于這個(gè)原理而實(shí)現(xiàn),只是為了應(yīng)用的易用,各種語(yǔ)言通常都會(huì)提供一些更為貼近應(yīng)用易用的應(yīng)用層協(xié)議。
應(yīng)用級(jí)協(xié)議
遠(yuǎn)程服務(wù)通訊,需要達(dá)到的目標(biāo)是在一臺(tái)計(jì)算機(jī)發(fā)起請(qǐng)求,另外一臺(tái)機(jī)器在接收到請(qǐng)求后進(jìn)行相應(yīng)的處理并將結(jié)果返回給請(qǐng)求端,這其中又會(huì)有諸如one way request、同步請(qǐng)求、異步請(qǐng)求等等請(qǐng)求方式,按照網(wǎng)絡(luò)通信原理,需要實(shí)現(xiàn)這個(gè)需要做的就是將請(qǐng)求轉(zhuǎn)換成流,通過(guò)傳輸協(xié)議傳輸至遠(yuǎn)端,遠(yuǎn)端計(jì)算機(jī)在接收到請(qǐng)求的流后進(jìn)行處理,處理完畢后將結(jié)果轉(zhuǎn)化為流,并通過(guò)傳輸協(xié)議返回給調(diào)用端。
原理是這樣的,但為了應(yīng)用的方便,業(yè)界推出了很多基于此原理之上的應(yīng)用級(jí)的協(xié)議,使得大家可以不用去直接操作這么底層的東西,通常應(yīng)用級(jí)的遠(yuǎn)程通信協(xié)議會(huì)提供:
1、為了避免直接做流操作這么麻煩,提供一種更加易用或貼合語(yǔ)言的標(biāo)準(zhǔn)傳輸格式;
2、網(wǎng)絡(luò)通信機(jī)制的實(shí)現(xiàn),就是替你完成了將傳輸格式轉(zhuǎn)化為流,通過(guò)某種傳輸協(xié)議傳輸至遠(yuǎn)端計(jì)算機(jī),遠(yuǎn)端計(jì)算機(jī)在接收到流后轉(zhuǎn)化為傳輸格式,并進(jìn)行存儲(chǔ)或以某種方式通知遠(yuǎn)端計(jì)算機(jī)。
所以在學(xué)習(xí)應(yīng)用級(jí)的遠(yuǎn)程通信協(xié)議時(shí),我們可以帶著這幾個(gè)問(wèn)題進(jìn)行學(xué)習(xí):
1、傳輸?shù)臉?biāo)準(zhǔn)格式是什么?
2、怎么樣將請(qǐng)求轉(zhuǎn)化為傳輸?shù)牧鳎?
3、怎么接收和處理流?
4、傳輸協(xié)議是?
不過(guò)應(yīng)用級(jí)的遠(yuǎn)程通信協(xié)議并不會(huì)在傳輸協(xié)議上做什么多大的改進(jìn),主要是在流操作方面,讓?xiě)?yīng)用層生成流和處理流的這個(gè)過(guò)程更加的貼合所使用的語(yǔ)言或標(biāo)準(zhǔn),至于傳輸協(xié)議則通常都是可選的,在java領(lǐng)域中知名的有:RMI、XML-RPC、Binary-RPC、SOAP、CORBA、JMS,來(lái)具體的看看這些遠(yuǎn)程通信的應(yīng)用級(jí)協(xié)議:
--------------------------------------------------------------------------------------------------------------------------------------------------
RMI
RMI是個(gè)典型的為java定制的遠(yuǎn)程通信協(xié)議,我們都知道,在single vm中,我們可以通過(guò)直接調(diào)用java object instance來(lái)實(shí)現(xiàn)通信,那么在遠(yuǎn)程通信時(shí),如果也能按照這種方式當(dāng)然是最好了,這種遠(yuǎn)程通信的機(jī)制成為RPC(Remote Procedure Call),RMI正是朝著這個(gè)目標(biāo)而誕生的。
來(lái)看下基于RMI的一次完整的遠(yuǎn)程通信過(guò)程的原理:
1、客戶端發(fā)起請(qǐng)求,請(qǐng)求轉(zhuǎn)交至RMI客戶端的stub類(lèi);
2、stub類(lèi)將請(qǐng)求的接口、方法、參數(shù)等信息進(jìn)行序列化;
3、基于socket將序列化后的流傳輸至服務(wù)器端;
4、服務(wù)器端接收到流后轉(zhuǎn)發(fā)至相應(yīng)的skelton類(lèi);
5、skelton類(lèi)將請(qǐng)求的信息反序列化后調(diào)用實(shí)際的處理類(lèi);
6、處理類(lèi)處理完畢后將結(jié)果返回給skelton類(lèi);
7、Skelton類(lèi)將結(jié)果序列化,通過(guò)socket將流傳送給客戶端的stub;
8、stub在接收到流后反序列化,將反序列化后的Java Object返回給調(diào)用者。
來(lái)看jboss-remoting對(duì)于此過(guò)程的一個(gè)更好的圖示:

根據(jù)原理來(lái)回答下之前學(xué)習(xí)應(yīng)用級(jí)協(xié)議帶著的幾個(gè)問(wèn)題:
1、傳輸?shù)臉?biāo)準(zhǔn)格式是什么?
是Java ObjectStream。
2、怎么樣將請(qǐng)求轉(zhuǎn)化為傳輸?shù)牧鳎?
基于Java串行化機(jī)制將請(qǐng)求的java object信息轉(zhuǎn)化為流。
3、怎么接收和處理流?
根據(jù)采用的協(xié)議啟動(dòng)相應(yīng)的監(jiān)聽(tīng)端口,當(dāng)有流進(jìn)入后基于Java串行化機(jī)制將流進(jìn)行反序列化,并根據(jù)RMI協(xié)議獲取到相應(yīng)的處理對(duì)象信息,進(jìn)行調(diào)用并處理,處理完畢后的結(jié)果同樣基于java串行化機(jī)制進(jìn)行返回。
4、傳輸協(xié)議是?
Socket。
--------------------------------------------------------------------------------------------------------------------------------------------------
XML-RPC
XML-RPC也是一種和RMI類(lèi)似的遠(yuǎn)程調(diào)用的協(xié)議,它和RMI的不同之處在于它以標(biāo)準(zhǔn)的xml格式來(lái)定義請(qǐng)求的信息(請(qǐng)求的對(duì)象、方法、參數(shù)等),這樣的好處是什么呢,就是在跨語(yǔ)言通訊的時(shí)候也可以使用。
來(lái)看下XML-RPC協(xié)議的一次遠(yuǎn)程通信過(guò)程:
1、客戶端發(fā)起請(qǐng)求,按照XML-RPC協(xié)議將請(qǐng)求信息進(jìn)行填充;
2、填充完畢后將xml轉(zhuǎn)化為流,通過(guò)傳輸協(xié)議進(jìn)行傳輸;
3、接收到在接收到流后轉(zhuǎn)換為xml,按照XML-RPC協(xié)議獲取請(qǐng)求的信息并進(jìn)行處理;
4、處理完畢后將結(jié)果按照XML-RPC協(xié)議寫(xiě)入xml中并返回。
圖示以上過(guò)程:

同樣來(lái)回答問(wèn)題:
1、傳輸?shù)臉?biāo)準(zhǔn)格式是?
標(biāo)準(zhǔn)格式的XML。
2、怎么樣將請(qǐng)求轉(zhuǎn)化為傳輸?shù)牧鳎?
將XML轉(zhuǎn)化為流。
3、怎么接收和處理流?
通過(guò)監(jiān)聽(tīng)的端口獲取到請(qǐng)求的流,轉(zhuǎn)化為XML,并根據(jù)協(xié)議獲取請(qǐng)求的信息,進(jìn)行處理并將結(jié)果寫(xiě)入XML中返回。
4、傳輸協(xié)議是?
Http。
--------------------------------------------------------------------------------------------------------------------------------------------------
Binary-RPC
Binary-RPC看名字就知道和XML-RPC是差不多的了,不同之處僅在于傳輸?shù)臉?biāo)準(zhǔn)格式由XML轉(zhuǎn)為了二進(jìn)制的格式。
同樣來(lái)回答問(wèn)題:
1、傳輸?shù)臉?biāo)準(zhǔn)格式是?
標(biāo)準(zhǔn)格式的二進(jìn)制文件。
2、怎么樣將請(qǐng)求轉(zhuǎn)化為傳輸?shù)牧鳎?
將二進(jìn)制格式文件轉(zhuǎn)化為流。
3、怎么接收和處理流?
通過(guò)監(jiān)聽(tīng)的端口獲取到請(qǐng)求的流,轉(zhuǎn)化為二進(jìn)制文件,根據(jù)協(xié)議獲取請(qǐng)求的信息,進(jìn)行處理并將結(jié)果寫(xiě)入XML中返回。
4、傳輸協(xié)議是?
Http。
--------------------------------------------------------------------------------------------------------------------------------------------------
SOAP
SOAP原意為Simple Object Access Protocol,是一個(gè)用于分布式環(huán)境的、輕量級(jí)的、基于XML進(jìn)行信息交換的通信協(xié)議,可以認(rèn)為SOAP是XML RPC的高級(jí)版,兩者的原理完全相同,都是http+XML,不同的僅在于兩者定義的XML規(guī)范不同,SOAP也是Webservice采用的服務(wù)調(diào)用協(xié)議標(biāo)準(zhǔn),因此在此就不多加闡述了。
--------------------------------------------------------------------------------------------------------------------------------------------------
CORBA
Common Object Request Broker Architecture (公用對(duì)象請(qǐng)求代理[調(diào)度]程序體系結(jié)構(gòu)),是一組用來(lái)定義“分布式對(duì)象系統(tǒng)”的標(biāo)準(zhǔn),由OMG(Object Menagement Group)作為發(fā)起和標(biāo)準(zhǔn)制定單位。CORBA的目的是定義一套協(xié)議,符合這個(gè)協(xié)議的對(duì)象可以互相交互,不論它們是用什么樣的語(yǔ)言寫(xiě)的,不論它們運(yùn)行于什么樣的機(jī)器和操作系統(tǒng)。
CORBA在我看來(lái)是個(gè)類(lèi)似于SOA的體系架構(gòu),涵蓋可選的遠(yuǎn)程通信協(xié)議,但其本身不能列入通信協(xié)議這里來(lái)講,而且CORBA基本淘汰,再加上對(duì)CORBA也不怎么懂,在此就不進(jìn)行闡述了。
--------------------------------------------------------------------------------------------------------------------------------------------------
JMS
JMS呢,是實(shí)現(xiàn)java領(lǐng)域遠(yuǎn)程通信的一種手段和方法,基于JMS實(shí)現(xiàn)遠(yuǎn)程通信時(shí)和RPC是不同的,雖然可以做到RPC的效果,但因?yàn)椴皇菑膮f(xié)議級(jí)別定義的,因此我們不認(rèn)為JMS是個(gè)RPC協(xié)議,但它確實(shí)是個(gè)遠(yuǎn)程通信協(xié)議,在其他的語(yǔ)言體系中也存在著類(lèi)似JMS的東西,可以統(tǒng)一的將這類(lèi)機(jī)制稱(chēng)為消息機(jī)制,而消息機(jī)制呢,通常是高并發(fā)、分布式領(lǐng)域推薦的一種通信機(jī)制,這里的主要一個(gè)問(wèn)題是容錯(cuò)(詳細(xì)見(jiàn)ErLang論文)。
來(lái)看JMS中的一次遠(yuǎn)程通信的過(guò)程:
1、客戶端將請(qǐng)求轉(zhuǎn)化為符合JMS規(guī)定的Message;
2、通過(guò)JMS API將Message放入JMS Queue或Topic中;
3、如為JMS Queue,則發(fā)送中相應(yīng)的目標(biāo)Queue中,如為T(mén)opic,則發(fā)送給訂閱了此Topic的JMS Queue。
4、處理端則通過(guò)輪訓(xùn)JMS Queue,來(lái)獲取消息,接收到消息后根據(jù)JMS協(xié)議來(lái)解析Message并處理。
回答問(wèn)題:
1、傳輸?shù)臉?biāo)準(zhǔn)格式是?
JMS規(guī)定的Message。
2、怎么樣將請(qǐng)求轉(zhuǎn)化為傳輸?shù)牧鳎?
將參數(shù)信息放入Message中即可。
3、怎么接收和處理流?
輪訓(xùn)JMS Queue來(lái)接收Message,接收到后進(jìn)行處理,處理完畢后仍然是以Message的方式放入Queue中發(fā)送或Multicast。
4、傳輸協(xié)議是?
不限。
基于JMS也是常用的實(shí)現(xiàn)遠(yuǎn)程異步調(diào)用的方法之一。
(http://www.aygfsteel.com/BlueDavy/archive/2008/03/04/182077.html)(參考)
在分布式服務(wù)框架中,一個(gè)最基礎(chǔ)的問(wèn)題就是遠(yuǎn)程服務(wù)是怎么通訊的,在Java領(lǐng)域中有很多可實(shí)現(xiàn)遠(yuǎn)程通訊的技術(shù),例如:RMI、MINA、ESB、 Burlap、Hessian、SOAP、EJB和JMS等,這些名詞之間到底是些什么關(guān)系呢,它們背后到底是基于什么原理實(shí)現(xiàn)的呢,了解這些是實(shí)現(xiàn)分布式服務(wù)框架的基礎(chǔ)知識(shí),而如果在性能上有高的要求的話,那深入了解這些技術(shù)背后的機(jī)制就是必須的了,在這篇blog中我們將來(lái)一探究竟,拋磚引玉,歡迎大家提供更多的實(shí)現(xiàn)遠(yuǎn)程通訊的技術(shù)和原理的介紹。
基本原理
要實(shí)現(xiàn)網(wǎng)絡(luò)機(jī)器間的通訊,首先得來(lái)看看計(jì)算機(jī)系統(tǒng)網(wǎng)絡(luò)通信的基本原理,在底層層面去看,網(wǎng)絡(luò)通信需要做的就是將流從一臺(tái)計(jì)算機(jī)傳輸?shù)搅硗庖慌_(tái)計(jì)算機(jī),基于傳輸協(xié)議和網(wǎng)絡(luò)IO來(lái)實(shí)現(xiàn),其中傳輸協(xié)議比較出名的有http、tcp、udp等等,http、tcp、udp都是在基于Socket概念上為某類(lèi)應(yīng)用場(chǎng)景而擴(kuò)展出的傳輸協(xié)議,網(wǎng)絡(luò)IO,主要有bio、nio、aio三種方式,所有的分布式應(yīng)用通訊都基于這個(gè)原理而實(shí)現(xiàn),只是為了應(yīng)用的易用,各種語(yǔ)言通常都會(huì)提供一些更為貼近應(yīng)用易用的應(yīng)用層協(xié)議。
應(yīng)用級(jí)協(xié)議
遠(yuǎn)程服務(wù)通訊,需要達(dá)到的目標(biāo)是在一臺(tái)計(jì)算機(jī)發(fā)起請(qǐng)求,另外一臺(tái)機(jī)器在接收到請(qǐng)求后進(jìn)行相應(yīng)的處理并將結(jié)果返回給請(qǐng)求端,這其中又會(huì)有諸如one way request、同步請(qǐng)求、異步請(qǐng)求等等請(qǐng)求方式,按照網(wǎng)絡(luò)通信原理,需要實(shí)現(xiàn)這個(gè)需要做的就是將請(qǐng)求轉(zhuǎn)換成流,通過(guò)傳輸協(xié)議傳輸至遠(yuǎn)端,遠(yuǎn)端計(jì)算機(jī)在接收到請(qǐng)求的流后進(jìn)行處理,處理完畢后將結(jié)果轉(zhuǎn)化為流,并通過(guò)傳輸協(xié)議返回給調(diào)用端。
原理是這樣的,但為了應(yīng)用的方便,業(yè)界推出了很多基于此原理之上的應(yīng)用級(jí)的協(xié)議,使得大家可以不用去直接操作這么底層的東西,通常應(yīng)用級(jí)的遠(yuǎn)程通信協(xié)議會(huì)提供:
1、為了避免直接做流操作這么麻煩,提供一種更加易用或貼合語(yǔ)言的標(biāo)準(zhǔn)傳輸格式;
2、網(wǎng)絡(luò)通信機(jī)制的實(shí)現(xiàn),就是替你完成了將傳輸格式轉(zhuǎn)化為流,通過(guò)某種傳輸協(xié)議傳輸至遠(yuǎn)端計(jì)算機(jī),遠(yuǎn)端計(jì)算機(jī)在接收到流后轉(zhuǎn)化為傳輸格式,并進(jìn)行存儲(chǔ)或以某種方式通知遠(yuǎn)端計(jì)算機(jī)。
所以在學(xué)習(xí)應(yīng)用級(jí)的遠(yuǎn)程通信協(xié)議時(shí),我們可以帶著這幾個(gè)問(wèn)題進(jìn)行學(xué)習(xí):
1、傳輸?shù)臉?biāo)準(zhǔn)格式是什么?
2、怎么樣將請(qǐng)求轉(zhuǎn)化為傳輸?shù)牧鳎?
3、怎么接收和處理流?
4、傳輸協(xié)議是?
不過(guò)應(yīng)用級(jí)的遠(yuǎn)程通信協(xié)議并不會(huì)在傳輸協(xié)議上做什么多大的改進(jìn),主要是在流操作方面,讓?xiě)?yīng)用層生成流和處理流的這個(gè)過(guò)程更加的貼合所使用的語(yǔ)言或標(biāo)準(zhǔn),至于傳輸協(xié)議則通常都是可選的,在java領(lǐng)域中知名的有:RMI、XML-RPC、Binary-RPC、SOAP、CORBA、JMS,來(lái)具體的看看這些遠(yuǎn)程通信的應(yīng)用級(jí)協(xié)議:
--------------------------------------------------------------------------------------------------------------------------------------------------
RMI
RMI是個(gè)典型的為java定制的遠(yuǎn)程通信協(xié)議,我們都知道,在single vm中,我們可以通過(guò)直接調(diào)用java object instance來(lái)實(shí)現(xiàn)通信,那么在遠(yuǎn)程通信時(shí),如果也能按照這種方式當(dāng)然是最好了,這種遠(yuǎn)程通信的機(jī)制成為RPC(Remote Procedure Call),RMI正是朝著這個(gè)目標(biāo)而誕生的。
來(lái)看下基于RMI的一次完整的遠(yuǎn)程通信過(guò)程的原理:
1、客戶端發(fā)起請(qǐng)求,請(qǐng)求轉(zhuǎn)交至RMI客戶端的stub類(lèi);
2、stub類(lèi)將請(qǐng)求的接口、方法、參數(shù)等信息進(jìn)行序列化;
3、基于socket將序列化后的流傳輸至服務(wù)器端;
4、服務(wù)器端接收到流后轉(zhuǎn)發(fā)至相應(yīng)的skelton類(lèi);
5、skelton類(lèi)將請(qǐng)求的信息反序列化后調(diào)用實(shí)際的處理類(lèi);
6、處理類(lèi)處理完畢后將結(jié)果返回給skelton類(lèi);
7、Skelton類(lèi)將結(jié)果序列化,通過(guò)socket將流傳送給客戶端的stub;
8、stub在接收到流后反序列化,將反序列化后的Java Object返回給調(diào)用者。
來(lái)看jboss-remoting對(duì)于此過(guò)程的一個(gè)更好的圖示:

根據(jù)原理來(lái)回答下之前學(xué)習(xí)應(yīng)用級(jí)協(xié)議帶著的幾個(gè)問(wèn)題:
1、傳輸?shù)臉?biāo)準(zhǔn)格式是什么?
是Java ObjectStream。
2、怎么樣將請(qǐng)求轉(zhuǎn)化為傳輸?shù)牧鳎?
基于Java串行化機(jī)制將請(qǐng)求的java object信息轉(zhuǎn)化為流。
3、怎么接收和處理流?
根據(jù)采用的協(xié)議啟動(dòng)相應(yīng)的監(jiān)聽(tīng)端口,當(dāng)有流進(jìn)入后基于Java串行化機(jī)制將流進(jìn)行反序列化,并根據(jù)RMI協(xié)議獲取到相應(yīng)的處理對(duì)象信息,進(jìn)行調(diào)用并處理,處理完畢后的結(jié)果同樣基于java串行化機(jī)制進(jìn)行返回。
4、傳輸協(xié)議是?
Socket。
--------------------------------------------------------------------------------------------------------------------------------------------------
XML-RPC
XML-RPC也是一種和RMI類(lèi)似的遠(yuǎn)程調(diào)用的協(xié)議,它和RMI的不同之處在于它以標(biāo)準(zhǔn)的xml格式來(lái)定義請(qǐng)求的信息(請(qǐng)求的對(duì)象、方法、參數(shù)等),這樣的好處是什么呢,就是在跨語(yǔ)言通訊的時(shí)候也可以使用。
來(lái)看下XML-RPC協(xié)議的一次遠(yuǎn)程通信過(guò)程:
1、客戶端發(fā)起請(qǐng)求,按照XML-RPC協(xié)議將請(qǐng)求信息進(jìn)行填充;
2、填充完畢后將xml轉(zhuǎn)化為流,通過(guò)傳輸協(xié)議進(jìn)行傳輸;
3、接收到在接收到流后轉(zhuǎn)換為xml,按照XML-RPC協(xié)議獲取請(qǐng)求的信息并進(jìn)行處理;
4、處理完畢后將結(jié)果按照XML-RPC協(xié)議寫(xiě)入xml中并返回。
圖示以上過(guò)程:

同樣來(lái)回答問(wèn)題:
1、傳輸?shù)臉?biāo)準(zhǔn)格式是?
標(biāo)準(zhǔn)格式的XML。
2、怎么樣將請(qǐng)求轉(zhuǎn)化為傳輸?shù)牧鳎?
將XML轉(zhuǎn)化為流。
3、怎么接收和處理流?
通過(guò)監(jiān)聽(tīng)的端口獲取到請(qǐng)求的流,轉(zhuǎn)化為XML,并根據(jù)協(xié)議獲取請(qǐng)求的信息,進(jìn)行處理并將結(jié)果寫(xiě)入XML中返回。
4、傳輸協(xié)議是?
Http。
--------------------------------------------------------------------------------------------------------------------------------------------------
Binary-RPC
Binary-RPC看名字就知道和XML-RPC是差不多的了,不同之處僅在于傳輸?shù)臉?biāo)準(zhǔn)格式由XML轉(zhuǎn)為了二進(jìn)制的格式。
同樣來(lái)回答問(wèn)題:
1、傳輸?shù)臉?biāo)準(zhǔn)格式是?
標(biāo)準(zhǔn)格式的二進(jìn)制文件。
2、怎么樣將請(qǐng)求轉(zhuǎn)化為傳輸?shù)牧鳎?
將二進(jìn)制格式文件轉(zhuǎn)化為流。
3、怎么接收和處理流?
通過(guò)監(jiān)聽(tīng)的端口獲取到請(qǐng)求的流,轉(zhuǎn)化為二進(jìn)制文件,根據(jù)協(xié)議獲取請(qǐng)求的信息,進(jìn)行處理并將結(jié)果寫(xiě)入XML中返回。
4、傳輸協(xié)議是?
Http。
--------------------------------------------------------------------------------------------------------------------------------------------------
SOAP
SOAP原意為Simple Object Access Protocol,是一個(gè)用于分布式環(huán)境的、輕量級(jí)的、基于XML進(jìn)行信息交換的通信協(xié)議,可以認(rèn)為SOAP是XML RPC的高級(jí)版,兩者的原理完全相同,都是http+XML,不同的僅在于兩者定義的XML規(guī)范不同,SOAP也是Webservice采用的服務(wù)調(diào)用協(xié)議標(biāo)準(zhǔn),因此在此就不多加闡述了。
--------------------------------------------------------------------------------------------------------------------------------------------------
CORBA
Common Object Request Broker Architecture (公用對(duì)象請(qǐng)求代理[調(diào)度]程序體系結(jié)構(gòu)),是一組用來(lái)定義“分布式對(duì)象系統(tǒng)”的標(biāo)準(zhǔn),由OMG(Object Menagement Group)作為發(fā)起和標(biāo)準(zhǔn)制定單位。CORBA的目的是定義一套協(xié)議,符合這個(gè)協(xié)議的對(duì)象可以互相交互,不論它們是用什么樣的語(yǔ)言寫(xiě)的,不論它們運(yùn)行于什么樣的機(jī)器和操作系統(tǒng)。
CORBA在我看來(lái)是個(gè)類(lèi)似于SOA的體系架構(gòu),涵蓋可選的遠(yuǎn)程通信協(xié)議,但其本身不能列入通信協(xié)議這里來(lái)講,而且CORBA基本淘汰,再加上對(duì)CORBA也不怎么懂,在此就不進(jìn)行闡述了。
--------------------------------------------------------------------------------------------------------------------------------------------------
JMS
JMS呢,是實(shí)現(xiàn)java領(lǐng)域遠(yuǎn)程通信的一種手段和方法,基于JMS實(shí)現(xiàn)遠(yuǎn)程通信時(shí)和RPC是不同的,雖然可以做到RPC的效果,但因?yàn)椴皇菑膮f(xié)議級(jí)別定義的,因此我們不認(rèn)為JMS是個(gè)RPC協(xié)議,但它確實(shí)是個(gè)遠(yuǎn)程通信協(xié)議,在其他的語(yǔ)言體系中也存在著類(lèi)似JMS的東西,可以統(tǒng)一的將這類(lèi)機(jī)制稱(chēng)為消息機(jī)制,而消息機(jī)制呢,通常是高并發(fā)、分布式領(lǐng)域推薦的一種通信機(jī)制,這里的主要一個(gè)問(wèn)題是容錯(cuò)(詳細(xì)見(jiàn)ErLang論文)。
來(lái)看JMS中的一次遠(yuǎn)程通信的過(guò)程:
1、客戶端將請(qǐng)求轉(zhuǎn)化為符合JMS規(guī)定的Message;
2、通過(guò)JMS API將Message放入JMS Queue或Topic中;
3、如為JMS Queue,則發(fā)送中相應(yīng)的目標(biāo)Queue中,如為T(mén)opic,則發(fā)送給訂閱了此Topic的JMS Queue。
4、處理端則通過(guò)輪訓(xùn)JMS Queue,來(lái)獲取消息,接收到消息后根據(jù)JMS協(xié)議來(lái)解析Message并處理。
回答問(wèn)題:
1、傳輸?shù)臉?biāo)準(zhǔn)格式是?
JMS規(guī)定的Message。
2、怎么樣將請(qǐng)求轉(zhuǎn)化為傳輸?shù)牧鳎?
將參數(shù)信息放入Message中即可。
3、怎么接收和處理流?
輪訓(xùn)JMS Queue來(lái)接收Message,接收到后進(jìn)行處理,處理完畢后仍然是以Message的方式放入Queue中發(fā)送或Multicast。
4、傳輸協(xié)議是?
不限。
基于JMS也是常用的實(shí)現(xiàn)遠(yuǎn)程異步調(diào)用的方法之一。
(http://www.aygfsteel.com/BlueDavy/archive/2008/03/04/182077.html)(參考)