flex + blazeds messaging应用很广泛,比如实时聊天,collaborationapplication。在BlazeDS turnkey (https://www.adobe.com/cfusion/entitlement/index.cfm?e=lc_blazeds)就有一个CollaborationDashboard sample。
该sampleshow how you can use the Message Service to build collaborative applications.To try this sample, open the application in two different browser windows andnotice how selections made in one window are reflected in the other window.
下面讲解怎样搭建flex +blazeds最简单的messaging例子:简易聊天室
1. 在tomcat里创建一个web app (e.g. blazeds),然后把blazeds.war里的东东全部copy到该目录。
2. 修改WEB-INF/flex/messaging-config.xml (蓝色和红色部分是添加的,虽然不知道为什么要添加,因为不加也行,稍后研究)
<?xml version="1.0" encoding="UTF-8"?>
<service id="message-service"
class="flex.messaging.services.MessageService">
<adapters>
<adapter-definition id="actionscript" class="flex.messaging.services.messaging.adapters.ActionScriptAdapter" default="true" />
<adapter-definition id="jms" class="flex.messaging.services.messaging.adapters.JMSAdapter"/>
</adapters>
<default-channels>
<channel ref="my-streaming-amf"/>
<channel ref="my-polling-amf"/>
</default-channels>
<destination id="chat"/>
</service>
3. 在WEB-INF/flex/services-config.xml里的<channels>里添加下列代码
<channel-definition id="my-streaming-amf" class="mx.messaging.channels.StreamingAMFChannel">
<endpoint class="flex.messaging.endpoints.StreamingAMFEndpoint" url="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf"/>
</channel-definition>
4. restart tomcat
5. 创建flexproject (link to this blazeds web app),mxml file的代码如下
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="subscribe();" height="432" width="686">
<mx:Script>
<![CDATA[
import mx.messaging.messages.*;
import mx.messaging.events.*;
private function subscribe():void {
consumer.subscribe();
}
private var begintime:Date;
private var endtime:Date;
private function messageHandler(event:MessageEvent):void{
ta.text +=event.message.body;
endtime=new Date();
var elapse:Number=endtime.valueOf()-begintime.valueOf();
ta.text+=" --耗时:"+elapse+"毫秒" +"\n";
}
private function sendMessage():void {
var message:AsyncMessage = new AsyncMessage();
message.body =userName.text +": " +msg.text;
producer.send(message);
msg.text = "";
begintime=new Date();
}
]]>
</mx:Script>
<mx:Producer id="producer" destination="chat"/>
<mx:Consumer id="consumer" destination="chat" message="messageHandler(event)"/>
<mx:TextArea id="ta" width="640" height="231" x="13.5" y="37"/>
<mx:TextInput id="userName" x="100" y="275" width="200" text="Eric Han"/>
<mx:TextInput id="msg" width="546" x="98" y="318" />
<mx:Label text="UserName" x="10" y="275" width="80"/>
<mx:Label text="message" x="10" y="320" width="80"/>
<mx:Button label="Send" click="sendMessage();" x="318.5" y="377"/>
</mx:Application>