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 接收消息:
使用send 方法发送消息,该方法接受mx.messaging.AsyncMessage 作为参数。
AsyncMessage 的主体作为值发送给通道的所有订阅者:
完整代码如下:
我想在服务端数据改变能通知客户端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
{
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);
msg.body = "test message";
producer.send(msg);
完整代码如下:
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" pageTitle="Simple Flex Chat" creationComplete="chatSubscriber.subscribe()">
<!-- Messaging Declarations -->
<mx:Producer id="producer" destination="http://localhost:8400/chatDestination"/>
<mx:Consumer id="subscriber" destination="http://localhost:8400/chatDestination" message="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>
<!-- Messaging Declarations -->
<mx:Producer id="producer" destination="http://localhost:8400/chatDestination"/>
<mx:Consumer id="subscriber" destination="http://localhost:8400/chatDestination" message="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>
加支付宝好友偷能量挖...