基础知识 :http://keren.iteye.com/blog/479000
Message Service 提供发布(publish) /订阅(subscribe) 机制允许Flex 应用程序发布消息、订阅消息终端(messaging destination),从而实现数据的实时推动 和协作传送 。
消息终端在messaging-config.xml配置,其中频道(channel)是其关键元素,它用来实现客户端和服务器端交换数据。使用BlazeDS,消息终端通常用作streaming 频道或者polling 频道。
使用streaming频道,服务器端会一直响应 HTTP请求直到该频道连接被关闭,它允许服务器向客户端不断传送大量的数据 。因为HTTP 连接是独一无二的,这实现数据的双向传送,每个streaming AMF或者HTTP频道事实上需要两个浏览器 HTTP连接,一个连接需要不断处理服务器端与频道紧密相关的客户端的响应。另外需要一个短暂连接,只有当数据需要传送到服务器时,它才脱离浏览器连接池;当短暂连接不再需要时,它立即被释放回浏览器连接池。
polling频道可以通过简单的时间间隔 或者使用服务器等待来配置,如果数据不马上可用 (长轮循)的话。另外,每次轮循响应完成请求。默认下浏览器HTTP 1.1的连接是持续的,浏览器轮循已有的连接,发送并发的轮循请求,以此来减轻轮循的开销。
当需要准实时通信 时,streaming 频道是最好选择。
Messaging Service可以让 某个客户端 和 其他客户端 之间 发送接收 信息。
1. 在“services-config.xml ”中添加以下内容:(记住channel 名字为amfpoll ,后面会用到)
设置polling频道的间隔 是1秒钟,即客户端每隔1秒钟就会向服务器请求这个消息。
使用polling频道是客户端获取更新最简单的途径 。
<channel-definition id="my-amf-poll" class="mx.messaging.channels.AMFChannel">
<endpoint
url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpoll"
class="flex.messaging.endpoints.AMFEndpoint"/>
<properties>
<polling-enabled>true</polling-enabled>
<polling-interval-seconds>1</polling-interval-seconds>
</properties>
</channel-definition>
2. 在“messaging-config.xml ”中添加以下内容:
<destination id="MessagingDestination" channels="my-amf-poll"/>
3. 建立一个mxml:(需手动建立channel )
Flex客户端使用 Producer 组件来发送 一个消息到服务器
- 创建 AsyncMessage 类的对象,设置该对象的 body 属性
- 调用 Producer.send() 方法进行发送
使用 Consumer 组件接收 消息
- 使用 Consumer.subscribe () 来订阅 消息
<?xml version="1.0"?>
<!-- intro\intro_messaging.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="100%"
creationComplete="consumer.subscribe();">
<mx:Script>
<![CDATA[
import mx.messaging.events.MessageFaultEvent;
import mx.messaging.events.MessageEvent;
import mx.messaging.messages.AsyncMessage;
import mx.messaging.Producer;
import mx.messaging.Consumer;
// Send the message in response to a Button click.
private function sendMessage():void {
var msg:AsyncMessage = new AsyncMessage();
msg.body = "Foo";
producer.send(msg);
}
// Handle the received message.
private function messageHandler(event:MessageEvent):void {
ta.text += "Consumer received message: "+ event.message.body + "\n";
}
// Handle a message fault.
private function faultHandler(event:MessageFaultEvent):void {
ta.text += "Received fault: " + event.faultString + "\n";
}
]]>
</mx:Script>
<!-- 设置channel为amfpoll -->
<mx:AMFChannel id="myamf"
uri="/ptp/messagebroker/amfpoll"/>
<mx:ChannelSet id="channelSet"
channels="{[myamf]}"/>
<mx:Producer id="producer" channelSet="{channelSet}"
destination="MessagingDestination"
fault="faultHandler(event);"/>
<mx:Consumer id="consumer" channelSet="{channelSet}"
destination="MessagingDestination"
fault="faultHandler(event);"
message="messageHandler(event);"/>
<mx:Button label="Send" click="sendMessage();"/>
<mx:TextArea id="ta" width="100%" height="100%"/>
</mx:Application>
本文介绍如何使用Flex和BlazeDS实现消息的实时推送和协作传送。通过配置AMF轮询频道,客户端可以每秒向服务器请求一次消息更新。利用Producer组件发送消息,并通过Consumer组件接收消息。
145

被折叠的 条评论
为什么被折叠?



