如果数据发生更改,如何使用套接字轮询xml数据(AS3)

如果数据发生更改,如何使用套接字轮询xml数据(AS3),xml,actionscript-3,Xml,Actionscript 3,我陷入了困境,非常感谢您的帮助,因为这已经超出了我对as3的舒适区。基本上,我在我工作的各个办公室的屏幕上都有一个销售演示。这些数据显示了每天的销售数据,当有人进行销售时,这些数据可能会发生变化。我有一个swf将XML文件中的数据加载到幻灯片中,除了XML文件在需要强制刷新(手动)时发生更改外,其他一切都很好。我希望这样,如果文件更改,它会自动反映在swf中。到目前为止,我的研究已经将我指向了AS3套接字通信,但我还没有成功地找到相关的教程。我的代码如下,如果有人能直接给我指出正确的方向,我将不

我陷入了困境,非常感谢您的帮助,因为这已经超出了我对as3的舒适区。基本上,我在我工作的各个办公室的屏幕上都有一个销售演示。这些数据显示了每天的销售数据,当有人进行销售时,这些数据可能会发生变化。我有一个swf将XML文件中的数据加载到幻灯片中,除了XML文件在需要强制刷新(手动)时发生更改外,其他一切都很好。我希望这样,如果文件更改,它会自动反映在swf中。到目前为止,我的研究已经将我指向了AS3套接字通信,但我还没有成功地找到相关的教程。我的代码如下,如果有人能直接给我指出正确的方向,我将不胜感激

//
//XML LOADING
//

var xmlfile:String;
var xmlf:String =  stage.loaderInfo.parameters.xmlfile;

if(xmlf!=null){
    xmlfile = xmlf;
}else{
    xmlfile = "file path";
}

var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, function(evt:IOErrorEvent):void {},false,0,true);
xmlLoader.addEventListener(Event.COMPLETE, xmlLoadingDone);
xmlLoader.load(new URLRequest(xmlfile));

////////////////////////////////////////////////////////////////////////////////////////////


//
//socket connection text  
//
var xmlSocket:XMLSocket = new XMLSocket();
var hostName:String = "hostname";

var connectionOpen:Boolean = false;

xmlSocket.addEventListener(Event.CONNECT, onSocketConnection, false, 0, true);
xmlSocket.addEventListener(DataEvent.DATA, onSocketResponse, false, 0, true);
xmlSocket.addEventListener(Event.CLOSE, onSocketClose, false, 0, true);
xmlSocket.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true);

function onSocketConnection(evt:Event):void {
//option to go here
connectionOpen = true;
trace("connection open");
      }

function onSocketResponse(evt:DataEvent):void {
    //option to go here
}

function onIOError(evt:IOErrorEvent):void {
//option to go here for error
}

function onSocketClose(evt:DataEvent):void {
    //option to go here
    xmlSocket.close();
    connectionOpen = false;
}

///////////////////////////////////////////////////////////////////////////////////////////

//
//XML DATA PARSING AND IMAGE LOADING STARTER
//

function xmlLoadingDone(e:Event):void {
    xmlLoader.removeEventListener(Event.COMPLETE, xmlLoadingDone);

    var XMLdata:XML = new XML(e.currentTarget.data);

    }

您将需要一个轮询循环,基本上设置一个
计时器
,并让经过的计时器处理程序重新加载XML

使循环间隔尽可能长或短

更新: 此代码示例可以添加到现有代码中

// Add these imports at the top...
import flash.utils.Timer;
import flash.events.TimerEvent;


// Then insert this code...
var delay:int = 30000;   // 30 seconds. (as milliseconds)
var repeat:int = 0;      // continue until the Timer is stopped.

var pollingLoop:Timer = new Timer(delay, repeat);
pollingLoop.addEventListener(TimerEvent.TIMER, timerHandler);

pollingLoop.start();     // begin polling.

function timerHandler(e:TimerEvent):void{
    // We do the xmlLoading in the timer handler...
    xmlLoader.load(new URLRequest(xmlfile));  
    // So remove the other copy of this ^ line from your code.
} 

// The xmlLoader handler now looks after the rest.

这应该可以满足您的需要。

您好,感谢您的快速响应,如果您不介意的话,我们将非常感谢您提供一个代码示例,这样做是有意义的,但我不确定从哪里开始,我的代码是否正确?是的,您只需每隔几秒钟重复一次XML加载,您就可以以任何其他方式检测更改。我将在我的答案中添加一个示例。非常感谢,我现在正在进行实现和测试-我会让您知道我的进展,再次感谢!!这是一个巨大的帮助,目前swf正在刷新,但在第4/5圈后崩溃,我正在调整计时器的频率,它应该会自行解决。再次感谢您的帮助。非常欢迎您,但飞机坠毁令人担忧。您可以尝试在计时器循环处理程序中重置
xmloader
,另外,我应该提到您也不再需要
XMLSocket
代码。