Flex 4.1 + BlazeDS(Demo实例)实现信息订阅推送
来源:互联网 发布:微信淘宝优惠券可靠吗 编辑:程序博客网 时间:2024/06/05 05:34
Flex数据推送实现前台消息订阅,是在前面Flex 4.1 + BlazeDS(Demo小实例)整合基础上进行的。首先来看subscrible.mxml源代码,如下:
<?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"><s:layout><s:BasicLayout/></s:layout><fx:Script><![CDATA[import mx.controls.Alert;import mx.messaging.ChannelSet;import mx.messaging.Consumer;import mx.messaging.events.MessageEvent;protected function submsg():void{Alert.show("click start"); var consumer:Consumer = new Consumer(); consumer.destination = "tick-data-feed"; consumer.subtopic = "tick"; consumer.channelSet = new ChannelSet(["my-streaming-amf"]);//添加message的监听,当后台有消息发送时,调用messageHandler consumer.addEventListener(MessageEvent.MESSAGE, messageHandler); consumer.subscribe(); } private function messageHandler(event:MessageEvent):void { var tick:TickVO = event.message.body as TickVO; txtTick.text = tick.messageCN + tick.seqNo; } ]]></fx:Script><fx:Declarations></fx:Declarations><mx:Panel x="32" y="43" width="362" height="302" layout="absolute" title="Watch Tick"><mx:Label id="txtTick" x="72" y="43" text="Label"/><mx:Button x="132" y="71" label="Button" click="submsg()"/></mx:Panel></s:Application>然后编写TickVo.as文件,如下:
package{//远程到后台的Tick,也就是说他们俩现在是对应的关系了,你在后台给model赋值了,在前台flex中就可以通过VO//取得model中的值[RemoteClass(alias="com.model.Tick")] [Bindable] public class TickVO{private var _seqNo:String;private var _messageCN:String;public function TickVO(){}public function get seqNo():String{return _seqNo;}public function set seqNo(value:String):void{_seqNo = value;}public function get messageCN():String{return _messageCN;}public function set messageCN(value:String):void{_messageCN = value;}}}编写与TickVo.as对应的后台Model,如下:
package com.model;public class Tick {private String seqNo;private String messageCN;public String getMessageCN() {return messageCN;}public void setMessageCN(String messageCN) {this.messageCN = messageCN;}public String getSeqNo() {return seqNo;}public void setSeqNo(String seqNo) {this.seqNo = seqNo;}}再创建一个Servlet类,如下:
package com.serverpush;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.model.Tick;import flex.messaging.MessageBroker;import flex.messaging.messages.AsyncMessage;import flex.messaging.util.UUIDUtils;public class TickCacheServlet extends HttpServlet {private static final long serialVersionUID = 1L;private static FeedThread thread;public TickCacheServlet() {super();}protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// 接收前台参数String cmd = request.getParameter("cmd");if (cmd.equals("start")) {start();}if (cmd.equals("stop")) {stop();}}public void start() {if (thread == null) {thread = new FeedThread();thread.start();}System.out.println("start!!");}public void stop() {thread.running = false;thread = null;}// 线程类,每隔多长时间发送一次public static class FeedThread extends Thread {public boolean running = true;public void run() {MessageBroker msgBroker = MessageBroker.getMessageBroker(null);String clientID = UUIDUtils.createUUID();int i = 0;while (running) {Tick tick = new Tick();tick.setMessageCN("今天下午6点更新程序需重启服务器");tick.setSeqNo(String.valueOf(i));System.out.println(i);AsyncMessage msg = new AsyncMessage();msg.setDestination("tick-data-feed");msg.setHeader("DSSubtopic", "tick");msg.setClientId(clientID);msg.setMessageId(UUIDUtils.createUUID());msg.setTimestamp(System.currentTimeMillis());msg.setBody(tick);msgBroker.routeMessageToService(msg, null);i++;try {Thread.sleep(2000);} catch (InterruptedException e) {}}}}}如上类是一个重点,需要好好理解。下面进行文件的配置,如下:
service-config.xml文件源码:
<channel-definition id="my-streaming-amf"class="mx.messaging.channels.StreamingAMFChannel"><endpointurl="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf"class="flex.messaging.endpoints.StreamingAMFEndpoint" /><properties><idle-timeout-minutes>0</idle-timeout-minutes><max-streaming-clients>10</max-streaming-clients><server-to-client-heartbeat-millis>5000</server-to-client-heartbeat-millis><user-agent-settings><user-agent match-on="MSIE" kickstart-bytes="2048"max-streaming-connections-per-session="1" /><user-agent match-on="Firefox" kickstart-bytes="2048" max-streaming-connections-per-session="1" /></user-agent-settings></properties></channel-definition>message-config.xml文件源码如下:
<destination id="tick-data-feed"><properties><server><allow-subtopics>true</allow-subtopics><subtopic-separator>.</subtopic-separator></server></properties><channels><channel ref="my-polling-amf" /><channel ref="my-streaming-amf" /></channels></destination>点击button,启动监听。
然后在浏览器中输入:http://localhost:8080/项目名/Servlet映射路径?cmd=start,就可将订阅的信息进行推送了。
0 0
- Flex 4.1 + BlazeDS(Demo实例)实现信息订阅推送
- Flex 4.1 + BlazeDs (Demo实例)
- Flex 4.1 + BlazeDs + parsley框架(Demo实例)
- Flex 4.1 + BlazeDS框架 + Cairngorm框架(Demo实例)
- Flex与java通过BlazeDS实现通信(简单Demo)
- Flex与java通过BlazeDS实现通信(简单Demo)
- Flex Blazeds推送机制
- blazeds实现消息推送的实例
- blazeds实现消息推送的实例
- Cairngorm+BlazeDS整合Flex+Java的Demo(实例)
- Cairngorm + BlazeDS 整合 Flex + Java 的 Demo (实例)
- 推送消息----blazeds----flex----spring
- FLEX和java web通过blazeds交互信息的实例
- BlazeDS实现Java和Flex通信的Demo
- 实现Flex与Java的通信的Demo(BlazeDS方式)
- Flex+BlazeDS整合J2EE实例
- Flex+BlazeDS整合J2EE实例
- Flex+BlazeDS整合J2EE实例
- s:iterator遍历 object.List<List<String>>
- Win7x64下VC6.0的一些蛋疼的问题+解决方案。
- 为VMware里的虚拟机设置静态IP
- leetcode第一刷_Substring with Concatenation of All Words
- 上司
- Flex 4.1 + BlazeDS(Demo实例)实现信息订阅推送
- 停止
- 图形学中的贴图采样、走样与反走样等
- 你若不来
- cocos2d-x 3.0 内存管理
- 九度题目1363:欢乐斗地主
- SEO一定要是可控的
- 展示两种WCF服务通信方式
- python中函数参数传递的几种方法