`

Flex与java Server Push数据

阅读更多

我根据网上Push实例进行整理下,可以实现Push功能 myeclipse8+flex4.6 

1.Flex 工程

<?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" creationComplete="application1_creationCompleteHandler(event)">
	<fx:Script>
		<![CDATA[
			import mx.events.FlexEvent;
			import mx.messaging.channels.StreamingAMFChannel;
			
			protected function application1_creationCompleteHandler(event:FlexEvent):void
			{
				// TODO Auto-generated method stub
				
			}
			
			import mx.controls.Alert;  
			import mx.rpc.events.ResultEvent;  
			import mx.messaging.Consumer;  
			import mx.messaging.Channel;  
			import mx.messaging.ChannelSet;  
			import mx.messaging.events.MessageEvent;
			import com.Tick;
			[Bindable]  
			public var tick:Tick;
			
			public 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"]);  
				consumer.addEventListener(MessageEvent.MESSAGE, messageHandler);  
				consumer.subscribe();   */
				var streamingAMFChannel:StreamingAMFChannel=new StreamingAMFChannel();
				//streamingAMFChannel.requestTimeout=0;
				streamingAMFChannel.url="http://localhost:8080/pushDemo/messagebroker/streamingamf";
				var consumer:Consumer=new Consumer();
				consumer.destination="tick-data-feed";
				consumer.subtopic="tick";
				var set:ChannelSet=new ChannelSet();
				set.addChannel(streamingAMFChannel);
				consumer.channelSet=set; 
				//consumer.channelSet = new ChannelSet(["my-streaming-amf"]);
				consumer.addEventListener(MessageEvent.MESSAGE, messageHandler);
				consumer.unsubscribe();
				consumer.subscribe();
				Alert.show("click end");  
			}  
			
			private function messageHandler(event:MessageEvent):void   
			{  
				var tick:Tick = event.message.body as Tick;  
				txtTick.text = tick.seqno;  
				area.text = "askPrice"+tick.askPrice+  
					"bidPrice"+tick.bidPrice+  
					"midPrice"+tick.midPrice+  
					"tickTime"+tick.tickTime+  
					"seqno"+tick.seqno; 
			} 
			
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<mx:Panel x="524" y="47" width="362" height="302" layout="absolute" title="Watch Tick">
		<mx:Label x="72" y="43" text="Label" id="txtTick"/>
		<mx:Button x="132" y="41" label="Button" click="submsg(); "/>
		<s:TextArea x="53" y="96" width="259" id="area" height="152"/>
	</mx:Panel>
</s:Application>

 2.java 工程

package com.servlet;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;

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;  

	/**
	 * Constructor of the object.
	 */
	public TickCacheServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	      String cmd = request.getParameter("cmd");  
	        if (cmd.equals("start")) {  
	            start();  
	        }  
	        if (cmd.equals("stop")) {  
	            stop();  
	        }  


	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}


	public void start(){
		if(thread == null){
			thread = new FeedThread();
			thread.start();
		}
		System.out.println("thread start......");
	}
	public void stop(){
		thread.running = false;
		thread = null;
		System.out.println("thread stop......");
	}
	public static class FeedThread extends Thread{
		public boolean  running = true;
		public void run(){
			MessageBroker  broker = MessageBroker.getMessageBroker(null);
			String clientID = UUIDUtils.createUUID();
			int i = 0;
			while(running){
				Tick tick = new Tick();
				tick.setAskPrice(new BigDecimal("100"));  
                tick.setBidPrice(new BigDecimal("100"));  
                tick.setMidPrice(new BigDecimal("100"));  
                tick.setTickTime(new Date());
                
                tick.setSeqno(String.valueOf(i));
                System.out.println(i);
                
                AsyncMessage msg = new AsyncMessage();
                msg.setDestination("tick-data-feed");
                msg.setHeader("DSSubtopic", "tick"); 
                msg.setMessageId(UUIDUtils.createUUID());
                msg.setTimestamp(System.currentTimeMillis());
                msg.setBody(tick);
                broker.routeMessageToService(msg, null);
                i++;
                try {
					Thread.sleep(20);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
		
	}

}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics