在上一篇文章中已经介绍了第一例子,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目录下):消息服务例子