2011-08-01 64 views
0

我在寫一個應用程序,它調用16個市場的價格飼料並在應用程序中顯示它們。Flash AS3鎖定每秒XML調用

在as1中沒有問題,它永遠不會鎖定......但在as3中它可能會發出20個調用(20秒的數據)然後鎖定。

我當時的想法是有一個緩衝系統或類似的,我不知道在AS3

或任何其他的想法的東西。

下面是代碼

//=================================== 
// Package 
//=================================== 
var priceFeedURL = "http://www.blabla.com/prices.xml"; 
var xmlLoader:URLLoader = new URLLoader(); 
xmlLoader.addEventListener(Event.COMPLETE, showXML); 
var myObj:Object = new Object(); 
//=================================== 
// Call XML 
//=================================== 
function Init():void { 
    myTimer.start(); 
} 
function callPriceFeed():void { 
    xmlLoader.load(new URLRequest(priceFeedURL)); 
} 
function showXML(e:Event):void { 
    XML.ignoreWhitespace = true; 
    var pricesXML:XML = new XML(e.target.data); 
    myObj.currentPrice = pricesXML.IT[3][email protected]; 
    PerSecondFunctions(); 
} 
//=================================== 
// Timer 
//=================================== 
var myTimer:Timer = new Timer(1000); 
myTimer.addEventListener(TimerEvent.TIMER, timerListener); 
function timerListener(e:TimerEvent):void { 
    callPriceFeed(); 
} 
//=================================== 
// Per Second functions 
//=================================== 
function PerSecondFunctions():void { 
    ShowPrice(); 
} 
function ShowPrice():void { 
    currentPriceTXT.text = "PRICE : "+myObj.currentPrice; 
    trace(gnutradeObj.currentPrice+" "+Math.random()); 
    priceGlowMC.gotoAndPlay(2); 
} 

Init(); 

感謝

+0

myTimer呼籲timerListener每秒其將每秒鐘調用callPriceFeed。我不認爲你的邏輯在那裏。 –

+0

這正是我所需要的XML每秒更新一次,那爲什麼我需要調用它的每一秒,並重新加載新的股票價格 – gringoLoco007

+0

你有你這個 –

回答

0

我指的The_asMan的評論關於驗證你真的打算要發送的HTTP請求每秒一次。

我會做的就是儘量爲連續請求數據的方法,主要是因爲你使用全局變量來存儲/目前的數據,即使你還允許多個HTTP請求/響應可同時處理。通過這種方式,具有不同帶寬能力的客戶端可以每秒至多請求一次數據,而帶寬較低的客戶端在UI有機會呈現最新響應之前,不會通過重新請求數據來瓶頸自己的體驗。

基本上,我停止計時器在一秒鐘,然後出錯或響應完全/大部分處理後,再次啓動計時器。

我的變化與// ADDED

xmlLoader.addEventListener(Event.COMPLETE, showXML); 
xmlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler); 
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); 

// ADDED - restart (or maybe don't restart?) on error 
function errorHandler(e:Event):void{ 
    // log and/or show error? 
    if(!myTimer.running) 
     myTimer.start(); //start up again and hope for the best 
} 

function timerListener(e:TimerEvent):void { 
    // ADDED - stop timer and resume it after showXML (or error handler) has handled the response 
    myTimer.stop(); 
    callPriceFeed(); 
} 


function ShowPrice():void { 
    currentPriceTXT.text = "PRICE : "+myObj.currentPrice; 
    trace(gnutradeObj.currentPrice+" "+Math.random()); 
    priceGlowMC.gotoAndPlay(2); 
    // ADDED - data from response ought to have migrated to the UI, now start up timer again 
    if(!myTimer.running) 
     myTimer.start(); 
} 
+0

尼斯,由於將嘗試實行服務器負載的任何想法並保持張貼 – gringoLoco007