案例學習BlazeDS+Spring之十:Chat

來源:互聯網
上載者:User

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中還有應用到。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.