《BlazeDS开发指南》学习笔记(三):两个示例

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

 

你可能感兴趣的:(tomcat,xml,Web,浏览器,Flex)