如何使用ActionScript 3进行彗星长轮询?

时间:2010-06-01 18:40:43

标签: ajax flex flash actionscript-3 comet

我想从我的网络服务器加载数据,我希望它是AJAX / Comet方式,我的网络服务器长期保存请求,直到发生事情才响应它。因此,我写了一些像这样的as3代码:

    private function load(): void {
        var request:URLRequest = new URLRequest(url);
        var variables:URLVariables = new URLVariables();
        variables.tick = this.tick;
        request.data = variables;
        urlLoader = new URLLoader(request);
        urlLoader.addEventListener(Event.COMPLETE, onComplete);
        urlLoader.addEventListener(IOErrorEvent.IO_ERROR , onIOError);
        log.info("Loading info from {0}", request.url);
    }

如果等待时间很短,它可以工作,但是,它因IOError 2032而失败,似乎等待时间已经结束。这是问题,如何使用as3进行长轮询并避免超时错误?

感谢。

2 个答案:

答案 0 :(得分:2)

我建议将BlazeDS用于此类事情。如果你想构建自己的轮询机制,你可能会遇到很多问题,你将不得不编写很多代码。

关于您的问题,Flash播放器正在使用浏览器堆栈进行通信,因此即使您有html / js应用程序,您的请求也会失败。检查浏览器文档如何增加超时。

答案 1 :(得分:1)

您可以使用URLStream作为套接字(至少用于读取)并从服务器发送一些伪造的保持活动数据。假设0x00标记keepalive和0xFF标记内容,后跟32位内容长度和内容本身。

不要忘记在服务器端刷新,否则服务器可能会决定将1个字节保留在其缓冲区中。

您也可能感兴趣flexcomet

格尔茨
back2dos