18.7.使用发布/订阅消息

18.7.1. 问题
我想在服务端数据改变能通知客户端Flex 应用程序或广播消息给所有的监听器。
18.7.2. 解决办法
使用mx.messaging.Producer和mx.messaging.Consumer 标签配置用于通信的目标通道和消息事件设置事件处理器。配置这些需要使用Adobe LiveCycle 或BlazeDS 服务器。
18.7.3. 讨论
发布/订阅模式使用两个组件:mx.messaging.Producer 和mx.messaging.Consumer。Producer 发送消息给目标,服务器上处理信息的地址。Consumer 在目标上订阅这些信息,当获取数据时处理这些消息。

Flex 的消息可以是ActionScript 消息和Java Message Service (JMS) 消息。ActionScript 消息只支持客户端"讲"AMF 以及所需的类。JMS 消息允许LiveCycle 或BlazeDS 处理Java Message服务,与JMS 客户端交互。任何可以"讲"JMS 的应用程序都可被Flex 客户端调用,任何Java应用程序都可发布事件给Flex。

Consumer 通过mx.messaging.events.MessageEvent 接收消息:
+展开
-ActionScript
private function receiveChatMessage(msgEvent:MessageEvent):void
{
var msg:AsyncMessage = AsyncMessage(msgEvent.message);
trace("msg.body "+msg.body);
}
Producer 

使用send 方法发送消息,该方法接受mx.messaging.AsyncMessage 作为参数。

AsyncMessage 的主体作为值发送给通道的所有订阅者:
+展开
-ActionScript
var msg:AsyncMessage = new AsyncMessage();
msg.body = "test message";
producer.send(msg);

完整代码如下:
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxmlxmlns="*pageTitle="Simple Flex ChatcreationComplete="chatSubscriber.subscribe()">
<!-- Messaging Declarations -->
<mx:Producer id="producerdestination="http://localhost:8400/chatDestination"/>
<mx:Consumer id="subscriberdestination="http://localhost:8400/chatDestinationmessage="receiveChatMessage(event)" />
<mx:Script>
<![CDATA[
import mx.messaging.events.MessageEvent;
import mx.messaging.messages.AsyncMessage;
private function sendChatMessage():void
{
var msg:AsyncMessage = new AsyncMessage();
msg.body="test message";
producer.send(msg);
}
private function
receiveChatMessage(msgEvent:MessageEvent):void
{
var msg:AsyncMessage = AsyncMessage(msgEvent.message);
trace("msg.body "+msg.body);
}]
]>

</mx:Script>
</mx:Application>

加支付宝好友偷能量挖...


评论(0)网络
阅读(96)喜欢(0)flash/flex/fcs/AIR