??? 可選實現技術
??? 當然,在上面的原理中并沒有介紹到所有的java領域可選的遠程通信協議了,例如還有EJB采用的ORMI、Spring自己定義的一個簡單的Http Invoker等等。
??? 看完原理后我們再來看看目前java領域可用于實現遠程通訊的框架或library,知名的有:JBoss-Remoting、Spring-Remoting、Hessian、Burlap、XFire(Axis)、ActiveMQ、Mina、Mule、EJB3等等,來對每種做個簡單的介紹和評價,其實呢,要做分布式服務框架,這些東西都是要有非常深刻的了解的,因為分布式服務框架其實是包含了解決分布式領域以及應用層面領域兩方面問題的。
??? 當然,你也可以自己根據遠程網絡通信原理(transport protocol+Net IO)去實現自己的通訊框架或library.
??? 那么在了解這些遠程通訊的框架或library時,會帶著什么問題去學習呢?
??? 1、是基于什么協議實現的?
??? 2、怎么發起請求?
??? 3、怎么將請求轉化為符合協議的格式的?
??? 4、使用什么傳輸協議傳輸?
??? 5、響應端基于什么機制來接收請求?
??? 6、怎么將流還原為傳輸格式的?
??? 7、處理完畢后怎么回應?
??? JBoss-Remoting
??? Jboss-remoting是由jboss編寫的一個java領域的遠程通訊框架,基于此框架,可以很簡單的實現基于多種傳輸協議的java對象的RPC.
??? 直接來回答問題:
??? 1、是基于什么協議實現的?
??? JBoss-Remoting是個通訊框架,因此它支持多種協議方式的通信,例如tcp/ip+io方式、rmi方式、http+io方式等。
??? 2、怎么發起請求?
??? 在JBoss-Remoting中,只需將需要發起的請求參數對象傳入jboss-remoting的InvocationRequest對象即可,也可根據協議基于InvocationRequest封裝符合需求的InvocationRequest對象。
??? 3、怎么將請求轉化為符合協議的格式的?
??? JBoss-Remoting基于Java串行化機制或JBoss自己的串行化實現來將請求轉化為對象字節流。
??? 4、使用什么傳輸協議傳輸?
??? 支持多種傳輸協議,例如tcp/ip、http等。
??? 5、響應端基于什么機制來接收請求?
??? 響應端只需將自己的處理對象注冊到JBoss-Remoting提供的server端的Connector對象中即可。
??? 6、怎么將流還原為傳輸格式的?
??? JBoss-Remoting基于java串行化機制或jboss自己的串行化實現來將請求信息還原為java對象。
??? 7、處理完畢后怎么回應?
??? 處理完畢后將結果對象直接返回即可,jboss-remoting會將此對象按照協議進行序列化,返回至調用端。
??? 另外,jboss-remoting支持多種通信方式,例如同步/異步/單向通信等。
---------------------------------------------------------------------------------------------------------------------------
??? Spring-Remoting
??? Spring-remoting是Spring提供java領域的遠程通訊框架,基于此框架,同樣也可以很簡單的將普通的spring bean以某種遠程協議的方式來發布,同樣也可以配置spring bean為遠程調用的bean.
1、是基于什么協議實現的?
和JBoss-Remoting一樣,作為一個遠程通訊的框架,Spring通過集成多種遠程通訊的library,從而實現了對多種協議的支持,例如rmi、http+io、xml-rpc、binary-rpc等。
2、怎么發起請求?
在Spring中,由于其對于遠程調用的bean采用的是proxy實現,發起請求完全是通過服務接口調用的方式。
3、怎么將請求轉化為符合協議的格式的?
Spring按照協議方式將請求的對象信息轉化為流,例如Spring Http Invoker是基于Spring自己定義的一個協議來實現的,傳輸協議上采用的為http,請求信息是基于java串行化機制轉化為流進行傳輸。
4、使用什么傳輸協議傳輸?
支持多種傳輸協議,例如rmi、http等等。
5、響應端基于什么機制來接收請求?
響應端遵循協議方式來接收請求,對于使用者而言,則只需通過spring的配置方式將普通的spring bean配置為響應端或者說提供服務端。
6、怎么將流還原為傳輸格式的?
按照協議方式來進行還原。
7、處理完畢后怎么回應?
處理完畢后直接返回即可,spring-remoting將根據協議方式來做相應的序列化。
-----------------------------------------------------------------------------------------------------------------------------
Hessian
Hessian是由caucho提供的一個基于binary-RPC實現的遠程通訊library。
1、是基于什么協議實現的?
基于Binary-RPC協議實現。
2、怎么發起請求?
需通過Hessian本身提供的API來發起請求。
3、怎么將請求轉化為符合協議的格式的?
Hessian通過其自定義的串行化機制將請求信息進行序列化,產生二進制流。
??? Hessian基于Http協議進行傳輸。
??? 5、響應端基于什么機制來接收請求?
??? 響應端根據Hessian提供的API來接收請求。
??? 6、怎么將流還原為傳輸格式的?
??? Hessian根據其私有的串行化機制來將請求信息進行反序列化,傳遞給使用者時已是相應的請求信息對象了。
??? 7、處理完畢后怎么回應?
??? 處理完畢后直接返回,hessian將結果對象進行序列化,傳輸至調用端。
-------------------------------------------------------------------------------------------------------------------------------
??? Burlap
??? Burlap也是有caucho提供,它和hessian的不同在于,它是基于XML-RPC協議的。
??? 1、是基于什么協議實現的?
??? 基于XML-RPC協議實現。
??? 2、怎么發起請求?
??? 根據Burlap提供的API.
??? 3、怎么將請求轉化為符合協議的格式的?
??? 將請求信息轉化為符合協議的XML格式,轉化為流進行傳輸。
??? 4、使用什么傳輸協議傳輸?
??? Http協議。
??? 5、響應端基于什么機制來接收請求?
??? 監聽Http請求。
??? 6、怎么將流還原為傳輸格式的?
??? 根據XML-RPC協議進行還原。
??? 7、處理完畢后怎么回應?
??? 返回結果寫入XML中,由Burlap返回至調用端。
-----------------------------------------------------------------------------------------------------------------------------
posted on 2009-08-15 15:08
jadmin 閱讀(88)
評論(0) 編輯 收藏