日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flex采用blazeds实现服务器向客户端推数据

發布時間:2024/9/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flex采用blazeds实现服务器向客户端推数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:
有很多類似股票、外匯、期貨等實時行情這種應用,客戶端需要顯示行情牌價等信息。
目前的作法是:客戶端定時向服務器請求,無論數據是否有更新,都把數據發到客戶端。
我們這里講的一種技術不同以上這個做法,我們是采用服務器向客戶端推的這種方式,該方式的好處不言自明。blazeds中有一個名為:StreamingAMFChannel 的通道,我們就是采用它來實現向客戶端推這個功能。

環境準備:
我采用eclipse(wtp)+ flex3 build 的軟件環境。軟件安裝我這里就不說明了。blazeds我采用的是blazeds_bin_3-0-0-544,其實你只要下載blazeds.war文件即可。

操作步驟:

1 、切換至flex development視圖模式下,點右鍵新建一個Flex Project。
如我的項目名為:flex-blazeds

?

點擊Next按紐,來到下一頁面,

?

在這步中,直接點:Finish即可。
接下來,右鍵點擊flex-blazeds項目,打開“屬性”對話框,如下圖:把紅色圈起來的地方,改成紅字部分。

?

切換至“java開發視圖”,新建名為:cn.bestwiz.design.tc 的包,在該包中,新建名為Tick.java的類,內容如下:
//Tick.java

package cn.bestwiz.design.tc;import java.math.BigDecimal; import java.util.Date;public class Tick {private BigDecimal askPrice;private BigDecimal bidPrice;private BigDecimal midPrice;private Date tickTime;private String seqno;public String getSeqno() {return seqno;}public void setSeqno(String seqno) {this.seqno = seqno;}public BigDecimal getAskPrice() {return askPrice;}public void setAskPrice(BigDecimal askPrice) {this.askPrice = askPrice;}public BigDecimal getBidPrice() {return bidPrice;}public void setBidPrice(BigDecimal bidPrice) {this.bidPrice = bidPrice;}public BigDecimal getMidPrice() {return midPrice;}public void setMidPrice(BigDecimal midPrice) {this.midPrice = midPrice;}public Date getTickTime() {return tickTime;}public void setTickTime(Date tickTime) {this.tickTime = tickTime;}}

?

接下來,再新建一名為:cn.bestwiz.design.tc.servlet 的包,再切換至“j2ee視圖”,在該視圖模式下,新建一名為“TickCacheServlet.java”的Servlet.

?

?

點擊“Finish”完成即可。
文件內容如下:

//TickCacheServlet

package cn.bestwiz.design.tc.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 cn.bestwiz.design.tc.Tick; import flex.messaging.MessageBroker; import flex.messaging.messages.AsyncMessage; import flex.messaging.util.UUIDUtils;public class TickCacheServlet extends HttpServlet {private static FeedThread thread;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String cmd = req.getParameter("cmd");if (cmd.equals("start")) {start();}if (cmd.equals("stop")) {stop();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubsuper.doGet(req, resp);}@Overridepublic void destroy() {// TODO Auto-generated method stubsuper.destroy();}@Overridepublic void init() throws ServletException {// TODO Auto-generated method stubsuper.init();}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.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.setClientId(clientID);msg.setMessageId(UUIDUtils.createUUID());msg.setTimestamp(System.currentTimeMillis());msg.setBody(tick);msgBroker.routeMessageToService(msg, null);i++;try {Thread.sleep(20);} catch (InterruptedException e) {}}}}}

?

下一步加入flex配置文件。
flex的配置文件默認有四個,文件目錄在WebContent/WEB-INF/flex目錄下。
messaging-config.xml
proxy-config.xml
remoting-config.xml
services-config.xml
其實,這中間用的是一個,就是services-config.xml,只是在services-config.xml中,包含其它三個。

在services-config.xml文件中,加入如下:
??????? <channel-definition id="my-streaming-amf" class="mx.messaging.channels.StreamingAMFChannel">
??????????? <endpoint url="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>

messaging-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>

再切換至flex 開發視圖,新建一名為:Tick.as的ActionScript文件。

?

點擊“Finish”按紐。
Tick.as文件內容如下:
//Tick.as

package
??? {
??? [RemoteClass(alias="cn.bestwiz.design.tc.Tick")]
??? [Bindable]
??? public class Tick
??? {??? ???
??? ??? public var askPrice:Number;
??? ??? public var bidPrice:Number;
??? ??? public var midPrice:Number;
??? ??? public var tickTime:Date;;
??? ??? public var seqno:String;
??? }
???
}
再在main.mxml文件中,加入如下代碼:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" viewSourceURL="srcview/index.html" height="378" width="426">

??? <mx:Script>
??? ??? <![CDATA[
??? ??? ??? 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;

??? ??? ??? [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();
??? ??? ??? ??? Alert.show("click end");
??? ??? ??? }
??? ??? ???
??? ??? ??? private function messageHandler(event:MessageEvent):void
??? ??? ??? {
??? ??? ??? ??? var tick:Tick = event.message.body as Tick;
??? ??? ??? ??? txtTick.text = tick.seqno;
??? ??????? }
??? ??? ]]>
??? </mx:Script>
??? <mx:Panel x="32" y="43" 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(); "/>
??? </mx:Panel>
</mx:Application>



OK,至此,我們的代碼全部結束了。

下面我們開始測試。

打開一個瀏覽器,在瀏覽器的地址欄中,輸入:
http://localhost:8080/flex-blazeds/TickCacheServlet?cmd=start

再返回eclipse,在main.mxml文件上,單擊右鍵,用Flex Application運行它。
之后,在打開的瀏覽器flash上,點擊“Button”按紐,可以看到按紐之前的一個Label的Text一直有數字在增大。

總結

以上是生活随笔為你收集整理的flex采用blazeds实现服务器向客户端推数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 波多野结衣电影在线播放 | 全程粗话对白视频videos | 久久av一区二区三区漫画 | 在线免费观看亚洲视频 | 国产亚洲成av人片在线观看桃 | 性色av蜜臀av浪潮av老女人 | 成人网入口 | 久久色网| 人妻视频一区 | 国产精品久久久久久久免费观看 | 国产资源在线观看 | 国精产品99永久一区一区 | 丁香六月综合激情 | 手机av在线播放 | 成人高清视频在线观看 | 91在线公开视频 | 高h喷水荡肉少妇爽多p视频 | 亚洲制服丝袜诱惑 | 国产视频一区二区在线播放 | 在线观看超碰 | 黄色片免费的 | 福利视频免费看 | 最近中文字幕在线中文视频 | 91嫩草在线| 国产精品免费视频观看 | 免费黄色短片 | 久久久久亚洲av成人人电影 | 日韩精品一区二区三区网站 | 在线观看国产小视频 | 欧美xxxx888 | 国产一二三四五区 | 在线观看你懂得 | 亚洲女同志亚洲女同女播放 | 亚洲一二三四区 | 日韩性生活视频 | 国产又黄又大又粗的视频 | av最新网 | 打屁股黄文| 97超碰导航 | 国产做爰全过程免费视频 | 碰超在线 | 亚洲妇女av | 女人叫床很黄很污句子 | 18成人免费观看网站 | 黄色片国产 | 国产3级 | 97人人模人人爽人人少妇 | 特黄一级大片 | 国产成人一区二区三区免费看 | 香港三级日本三级 | 久久露脸国语精品国产 | 精品国产乱码久久久久久闺蜜 | 亚洲成人第一 | 色呦呦在线视频 | 国语对白永久免费 | 国内外成人在线视频 | 免费黄av| 在线免费观看一区二区 | av在线网址大全 | 日本久久不卡 | 91成人免费看 | 高h视频在线播放 | 豆花在线观看 | 男人天堂网在线视频 | 超碰在线亚洲 | 欧美爽爽 | 亚洲欧美综合在线观看 | 亚洲精品国产精品乱码不卡 | 看毛片视频 | 国产福利片在线观看 | 一本色道久久加勒比精品 | 欧美美女一区二区三区 | 校园春色自拍偷拍 | 欧洲成人午夜精品无码区久久 | 国产精品系列在线播放 | 波多野结衣日韩 | 五月天综合激情网 | 91麻豆精品国产理伦片在线观看 | 亚洲成人婷婷 | 天天操人人爽 | 一区二区视频免费在线观看 | 成人公开免费视频 | 久青草国产在线 | 精品在线观看一区二区 | 日本精品久久久久久 | 欧洲精品免费一区二区三区 | 久久91亚洲 | 中文字幕一区二区三区精彩视频 | 国产极品美女高潮无套在线观看 | 成人免费视频网址 | 欧美一卡二卡三卡四卡 | 欧洲亚洲视频 | 人人草人人插 | 欧美一级片免费在线观看 | 亚洲永久av| 成人免费在线观看网站 | 日本一区二区三区在线观看视频 | 亚洲高清免费视频 | 激情另类视频 |