Chat:
該DEMO展示的是BlazeDS的Message Service,是一個使用發布/訂閱者模式的簡單聊天室。
一、運行DEMO:
1、運行程式:http://localhost:8400/spring-flex-testdrive/chat/index.html;
2、在另一個瀏覽器視窗訪問同樣的URL,開啟第二個chat程式執行個體。
3、在一個chat用戶端輸入訊息,單擊“Send”,這個訊息顯示在兩個chat用戶端裡。
二、理解代碼:
1、chat.mxml的Producer/Consumer
Message Service管理一組Flex用戶端能發布和訂閱的destination集合。Flex提供Producer和Consumer兩個組件用於發布和訂閱destination。使用Consumer類的subscribe方法來訂閱目標(destination),當有訊息發布到你訂閱的目標時,訊息事件會在Consumer上觸發。
<mx:Producer id="producer" destination="chat" channelSet="{cs}"/>
<mx:Consumer id="consumer" destination="chat" channelSet="{cs}" message="messageHandler(event.message)"/>
2、chat.mxml channelSet
Producer和Consumer的channelSet是cs,destination是chat。
ChanelSetAPI允許你在運行時動態定義端點,在這個例子中,端點的URL是寫入程式碼在程式中的,在真實情況下,用戶端程式通常動態讀入這些參數。例如,用戶端程式在啟動時使用HTTPService載入XML檔案讀入這些參數。加入到channelSet的第一個通道作為首選通道用來嘗試串連伺服器,如果首選通道失敗,系統將嘗試使用定義在channelSet中的第二個通道來串連。
<mx:ChannelSet id="cs">
<mx:StreamingAMFChannel url="http://localhost:8400/spring-flex-testdrive/messagebroker/streamingamf"/>
<mx:AMFChannel url="http://localhost:8400/spring-flex-testdrive/messagebroker/amflongpolling"/>
<mx:AMFChannel url="http://localhost:8400/spring-flex-testdrive/messagebroker/amfpolling"/>
</mx:ChannelSet>
程式在啟動時consumer即訂閱chat訊息。
consumer.subscribe();
3、chat.mxml 非同步訊息
發送訊息是通過建立一個非同步訊息,由product發送出去。
var message:IMessage = new AsyncMessage();
message.body.userId = userId.text;
message.body.chatMessage = msg.text;
producer.send(message);
AsyncMessage的body是Object類型,是訊息本文包含需要傳遞到遠程目標的特定資料。
4、consumer接收訊息事件
當有訊息事件發生時,會觸發consumer上的message事件,程式通過messageHandler來處理。
private function messageHandler(message:IMessage):void
{
log.text += message.body.userId + ": " + message.body.chatMessage + "\n";
}
5、flex-servlet.xml
開啟flex-servlet.xml,查看Message Service配置。Message Service使用<flex:message-broker />裡的<flex:message-service />來配置。
<flex:message-broker>
<flex:message-service
default-channels="my-streaming-amf,my-longpolling-amf,my-polling-amf" />
<flex:secured />
</flex:message-broker>
message-service的預設通道my-streaming-amf,my-longpolling-amf,my-polling-amf在WEB-INF\flex\services-config.xml中定義。
6、chatMessage Service配置
在flex-servlet.xml中,使用<flxe:message-destination id="chat" />來配置Chat的Message Service。
三、小結:
使用BlazeDS的Message Service做聊天室,在後台只需做Message Service配置即可,發布/訂閱者模式的核心部分已由BlazeDS實現,但這隻是簡單的聊天程式罷了。Message Service的這種特性,在後面的幾個DEMO中還有應用到。