在上一篇文章中已经介绍了第一例子,RPC服务,在该篇文章中介绍另一个例子,消息服务。
二、消息服务例子
消息服务可以使得客户端发送和接收其他客户端的消息,在该例子中,接收和发送消息是基于同一个BlazeDS目的(destination)的。
首先,在WEB-INF/flex/messaging-config.xml文件中定义消息目的,代码如下:
<destination id="MessagingDestination" channels="my-polling-amf" />
上面使用的通道“my-amf-poll”在WEB-INF/flex/services-config.xml文件中定义,代码如下:
<channel-definition id="my-polling-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
<properties>
<polling-enabled>true</polling-enabled>
<polling-interval-seconds>1</polling-interval-seconds>
</properties>
</channel-definition>
上面定义了一个每隔一秒钟轮询一次的轮询通道,轮询是主动更新客户端数据的最简单方法,另外还可以配置的参数有piggybacking,long-polling和streaming。
在Flex客户端程序中,使用Producer控件发送消息,使用Consumer控件接收服务端返回的消息。发送消息时,首先创建一个AsyncMessage类的实例,然后设置该实例的body属性为具体要发送的内容,最后调用Producer的send()方法将消息发送给服务器;对于接收消息,在程序初始化时,就应该调用Consumer的subscribe()方法订阅Producer指定destination的服务器消息,服务器端有消息返回时,会自动调用Consumer的message指定的方法,详细代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" creationComplete="consumer.subscribe();">
<mx:Script>
<![CDATA[
import mx.messaging.messages.AsyncMessage;
import mx.messaging.events.MessageFaultEvent;
import mx.messaging.events.MessageEvent;
private function faultHandler(event:MessageFaultEvent):void
{
ta.text += "Received fault: " + event.faultString + "\n";
}
private function messageHandler(event:MessageEvent):void
{
ta.text += "Consumer received message: " + event.message.body + "\n";
}
private function sendMessage():void
{
var msg:AsyncMessage = new AsyncMessage();
msg.body = "Foo";
producer.send(msg);
}
]]>
</mx:Script>
<mx:Producer id="producer" destination="MessagingDestination" fault="faultHandler(event);" />
<mx:Consumer id="consumer" destination="MessagingDestination" fault="faultHandler(event);" message="messageHandler(event);" />
<mx:TextArea id="ta" width="100%" height="100%" />
<mx:Button label="Send" click="sendMessage();" />
</mx:Application>
将上面文件编译为SWF,并部署到BlazeDS服务器中,在浏览器中进行体验,如图:

整个代码请点击下载(解压后拷贝msg目录到Tomcat的webapps目录下):消息服务例子
本文介绍如何通过BlazeDS实现客户端间的消息传递。通过定义消息目的地和通道,客户端能够发送及接收消息。利用Flex中的Producer和Consumer控件,实现消息的发送与订阅。

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



