【depriveof425 】Adobe Flex開源後將在RPC上有更多選擇

iDotNetSpace發表於2008-06-05

Adobe宣佈對Adobe Flex平臺作了大改動,大量的生命週期資料服務(LiveCycle Data Services)在BlazeDS專案中被開源,開源內容還包括AMF的規格說明和程式碼。對於那些正在考慮採用Flex平臺的人來說,這次改動應該清除了最終的成本和許可障礙。

  Adobe Flex應用程式部署並執行在Flash Player中,其後臺邏輯通過RPC訪問,以一種類似於客戶/伺服器的構架方式。Flex中有很多不同的RPC選項,包括Web Services、HTTP和AMF/Data Services。AMF是一個二進位制協議,比傳統的RPC方法具有更多的優點。Adobe的James Ward在他的Blog文章“BlazeBench: Why you want AMF and BlazeDS”中著重提到了它在效能和頻寬上的優點。

  Adobe的Ted Patrick在他的文章“The ABC’s of AMF”中詳細描述了AMF的基本概念,並概括列出了下列幾個優點:

  1. 檔案大小 —— AMF物件非常小且使用zlib壓縮。

  2. 快速序列化/反序列化 —— AMF在player中使用本地C程式碼轉化,因而執行非常之快。AMF格式本身就被設計為在低記憶體和慢CPU條件下依然能夠快速序列化和反序列化。由於 AMF資料直接被解析為物件,沒有稽核解釋或解析AMF的延遲,物件的建立可一次完成。

  3. 本地型別和自定義類的支援 —— 除了displayObjects,你可以序列化Flash Player中的任何物件。在反序列的時候如果自定義類在Flash Player中,你也可以將先前序列化的物件對映回自定義類例項。

  在Adobe宣佈AMF和BlazeDS開源之前,開發人員確實也有一些開源工具可選擇來使用AMF協議,這些工具由一些團體採用反向工程而得。這些開源專案包括RubyAMF、AMFPHP、SabreAMF、OpenAMF和Granite Data Services(GraniteDS)。擁有一個公開釋出的AMF規格說明應該只會幫助改善這些實現。Ruby和PHP專案仍將首選在應用程式中使用這些技術以利用AMF,就如BlazeDS是Java應用程式在遠端訪問和訊息傳遞方面是首選。

  到目前為止,對於Java開發人員來說,GraniteDS是應用AMF協議的首選開源工具。當BlazeDS在週二宣佈的時候,GraniteDS 的建立者Franck Wolff顯得有點手足無措,並對GraniteDS的未來持有懷疑。他通過GraniteDS郵件列表向大家發表了他對於BlazeDS的看法:

  大家好:

  恩……這是一個好訊息(儘管我對此感覺還是有點怪)!

  對GDS來說,唯一可能的將來是為BlazeDS遺漏的效能提供一些程式碼(我主要考慮的是透明外化(transparent externalization)、延遲載入(lazy-loading)的支援、程式碼生成)……
  目前,我想我會停止任何GDS進一步的開發……歡迎大家做自由評論。
  不過,在深思之後,Wolff確實看到了GraniteDS的未來發展方向。在一個開源專案運作的樣例中,他認為有很多新特性可以貢獻給BlazeDS專案,或者可以繼續獨發展GrainteDS專案。
        一點點歷史回顧: GDS創立的起因是由於FDS太過昂貴,而且更重要的是,它並不與眾所周知的永續性API(EJB3/Hibernate)整合,也不提供任何延遲載入機制。這也是為什麼從最初我就建立了這個透明外化(transparent externalization)的特性(特別是HibernateExternalizer)來進行序列化並保持所有持久的相關bean的域(比如 id,version等)私有。後來,為了避免令人厭煩的手工編寫可外部化(Externalizable )AS3 bean的工作,gas3(GDS 程式碼生成器)應運而生。
  BlazeDS和GDS的比較:令人感到驚奇的是,從嚴格的遠端訪問的觀點來看,BlazeDS恰恰是GDS一直以來想要實現的方向:使用 RemoteObjects的經典的AMF3遠端訪問,一個新的基於Comet的通道用於在生產者和消費者之間通過HTTP(非RTMP)交換AMF3物件。另一方面,從永續性的觀點來看,BlazeDS不包含任何資料管理的特性,所以GDS可以補充很多非常重要的但BlazeDS缺少的特性:EJB3 永續性和延遲載入的支援。

  一點點策略:BlazeDS(LGPL3,含原始碼)的第一個釋出版本預告期為2008年初(沒有精確的日期……),對於我們來說最好的策略是儘快釋出 GDS1.0(在一月底之前),然後共同等待BlazeDS公開他們的原始碼。再然後,我們或者可以拷貝/貼上一些BlazeDS的好的程式碼到GDS(同一個license!)中,或者將外化+延遲載入機制+gas3新增到BlazeDS的特性中去(如果Adobe同意的話),或是甚至將GDS作為BlazeDS的一個外掛釋出(不知道有沒有這個可能性)。非常歡迎發表任何看法!

  GraniteDS對整合了Java的Flex應用程式確實有一些很優秀的特性和優點。另外,BlazeDS也不僅僅是一個AMF規格說明的實現,它提供了一些GraniteDS沒有的特性,如push、訊息傳遞。拋開實現不說,很明顯,Adobe向Flex平臺開源的邁進,對於Flex開發人員是百益無害。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-332629/,如需轉載,請註明出處,否則將追究法律責任。

相關文章