BlazeDS簡介
blazeDS是一套面向actionscript的前后臺通信框架。
在服務器端,blazeDS以servlet的方式存在于java應用服務器上。它默認提供3中服務,遠程調用(在remoting-config.xml中配置)、訪問代理(proxy-config.xml)、消息服務(messaging-config.xml),同時框架允許你添加自定義的服務(在services-config.xml中配置)。
在客戶端,blazeDS提供了RemoteObject、HttpServcie、WebService,Product和Comsumer等組件來提供訪問服務器端數據的能力,其中RemoteObject、Product和Comsumer是以amf協議來交換數據的,而HttpServcie和WebService則采用的是比較通用的訪問協議,可以用來訪問非blazeDS服務器(即普通的web服務器)。
那么服務端和客戶端如何關聯起來呢?答案是通過destination和channel、endpoint。
首先要在服務器端定義需要的destination,根據destination所屬的service類別不同,應該把destination定義在不同的配置文件里(remoting-config.xml或proxy-config.xml或messaging-config.xml)。同時為destination指定channel(如果不指定,就會使用默認的channel)。
在客戶端的代碼中只需要為你的組件(比如RemoteObject)指定destination和取得數據后的回調函數就行了,剩下來的就是編譯器的事情了。Flex為你隱藏了channel的調用。所以你需要寫的代碼很少。
服務端的結構圖如下:
客戶端的結構圖如下:
如果做個helloworld的例子,網上很多,blazeDS自帶的examples也很典型。這里就不累訴了。相信有一定經驗的初學者都能很快上手。需要強調的是,blazseDS客戶端工程的特殊之處是它的編譯依賴于服務端程序的4個配置文件,就是之前其提過的services-config.xml 、remoting-config.xml、proxy-config.xml、messaging-config.xml(都位于服務端工程的WEB-INF\flex目錄下),同時編譯參數Context Root必須設置正確。編譯錯了,程序再對也出不來結果的,呵呵。
介紹了blazeDS的結構體系,下面來分析下我們能用blazeDS來做什么呢?
這個就要中blazeDS所提供的3種服務來分析了。
1. 遠程調用。其實框架在這里起到的作用和struts等服務端的框架差不多,都是任務分配的功能,只不過blazeDS支持客戶端直接對象調用,一方面提高了數據傳輸速度,另一方面省了在客戶端寫url,但是它需要編譯客戶端的時候關聯服務端配置文件,煩!綜合考慮優缺點,這個功能還是值得使用的。
2. 訪問代理。能夠提供權限控制,和跨域訪問的能力。這個任何web服務器都能做到(加httpClient轉發么),沒什么特殊之處。
3. 消息服務。這個正式blazeDS 牛的地方,它能向普通的瀏覽器客戶端頁面推送數據,而不需要建立socket鏈接。這個應用在很多地方都有用到,比如股票信息即時刷新,在線聊天等等需要實時數據推送的場景。
我的想法是,如果是一個全新的完整的flash應用項目,那么用blazeDS的框架是一個不錯的選擇。如果是要在原有的javaWeb系統上增加功能的話,還是僅僅用一下blazeDS的消息推送服務就可以了,畢竟用flex直接訪問http也很方便。