Почему URLStream.connected всегда верно? - PullRequest
0 голосов
/ 06 апреля 2011

Я загружаю файл XML с помощью этой простой программы Flash CS5 / ActionScript 3:

import flash.net.*;

var URL_REQUEST:URLRequest = new URLRequest('http://preferans.de/top-xml.php');
var URL_STREAM:URLStream = new URLStream();
var URL_VARS:URLVariables = new URLVariables();
var UPDATE_TIMER:Timer = new Timer(1000);

stop();

UPDATE_TIMER.addEventListener(TimerEvent.TIMER, handleTimer);
UPDATE_TIMER.start();

URL_REQUEST.method = URLRequestMethod.GET;
URL_REQUEST.data = URL_VARS;

URL_STREAM.addEventListener(IOErrorEvent.IO_ERROR, handleUserError);
URL_STREAM.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleUserError);
URL_STREAM.addEventListener(Event.OPEN, handleUserOpen);
URL_STREAM.addEventListener(ProgressEvent.PROGRESS, handleUserData);
URL_STREAM.addEventListener(HTTPStatusEvent.HTTP_STATUS, handleUserStatus);
URL_STREAM.addEventListener(Event.COMPLETE, handleUserComplete);
URL_STREAM.load(URL_REQUEST);

function handleUserOpen(event:Event):void {
    trace('handleUserOpen: ' + event);
}

function handleUserData(event:Event):void {
    trace('handleUserData: ' + event);
}

function handleUserStatus(event:HTTPStatusEvent):void {
    trace('handleUserStatus: ' + event.status);
}

function handleUserError(event:Event):void {
    trace('handleUserError: ' + event);
} 

function handleUserComplete(event:Event):void {
    trace('handleUserComplete: ' + event);

    try {
        var str:String = URL_STREAM.readUTFBytes(URL_STREAM.bytesAvailable);
        var xml:XML = new XML(str);
        trace(xml);
    } catch(e:Error){
        trace('Invalid data: ' + e);
        return;
    }
}

function handleTimer(event:TimerEvent):void {
    var now:int = getTimer();

    trace(UPDATE_TIMER.currentCount + ' ' + now + ' ' + URL_STREAM.connected);
}

, она работает нормально, и я вижу содержимое XML:

handleUserOpen: [Event type="open" bubbles=false cancelable=false eventPhase=2]
handleUserData: [ProgressEvent type="progress" bubbles=false cancelable=false eventPhase=2 bytesLoaded=2390 bytesTotal=2390]
handleUserStatus: 200
handleUserComplete: [Event type="complete" bubbles=false cancelable=false eventPhase=2]
<pref>
   [ .... XML content .....]
</pref>
1 1054 true
2 2054 true
3 3054 true
4 4054 true
5 5054 true
.....
90 90054 true
91 91054 true

, но я неНе понимаю, почему URLStream.connected всегда true .

Я даже перезапускаю Apache на своем веб-сервере, но это ничего не меняет.

Я задаю этот вопрос, потому что я планирую реализовать вызовы типа Comet (иначе называемые HTTP-push) в моей программе, и мне нужно знать, работает ли URLStream все еще / занят, или он завершен / прерван и может быть повторно использовандля нового load () вызова (и я не хочу вводить переменную состояния обхода для этого).

Спасибо!Alex

1 Ответ

1 голос
/ 06 апреля 2011

Я думаю, что с URLStream до тех пор, пока он обращается к файлу, его соединение остается установленным, даже если он не начал загружать что-либо или завершил загрузку чего-либо.Поэтому я думаю, что вы должны вручную .close () это сделать в функции .COMPLETE после того, как вы закончили чтение значений.

...