Apache flex FLEX的新功能-从Java转换异步通信

Apache flex FLEX的新功能-从Java转换异步通信,apache-flex,actionscript-3,flex3,asynchronous,Apache Flex,Actionscript 3,Flex3,Asynchronous,我目前正在将一个Java项目翻译成Flex3。该项目的很大一部分涉及异步通信 程序将连接到一个流,开始下载数据。连接后不久,它将需要通过HTTP下载相同格式(关键帧)的上下文数据。在流或关键帧期间的不同点,可能需要额外的HTTP调用,例如获取加密密钥 在Java中,我会使用一个阻塞调用来执行HTTP请求,以获取密钥,该密钥将在HTTP完成时有效地暂停关键帧或流,然后继续执行 不幸的是,Flex是单线程的,HTTP请求是通过异步回调实现的,不可能以同样的方式实现代码 作为Flex的新手,我不确定这

我目前正在将一个Java项目翻译成Flex3。该项目的很大一部分涉及异步通信

程序将连接到一个流,开始下载数据。连接后不久,它将需要通过HTTP下载相同格式(关键帧)的上下文数据。在流或关键帧期间的不同点,可能需要额外的HTTP调用,例如获取加密密钥

在Java中,我会使用一个阻塞调用来执行HTTP请求,以获取密钥,该密钥将在HTTP完成时有效地暂停关键帧或流,然后继续执行

不幸的是,Flex是单线程的,HTTP请求是通过异步回调实现的,不可能以同样的方式实现代码

作为Flex的新手,我不确定这方面的常规做法是什么。目前,我计划保存状态并退出,依靠HTTP完成来重新启动暂停的流。或者使用计时器

但是对于流,我是否应该在处理HTTP请求时将接收到的数据与处理数据分离并对其进行缓冲?或者忽略进度事件并让Flex和/或操作系统缓冲它是否安全

有没有人对一种架构有什么建议,可以让这一切变得更容易

谢谢

编辑:感谢您迄今为止的答案

直接地-我不确定我是否理解你的意思,但我会调查的

brd6644-其中一个连接(流)已经是原始套接字。问题是暂停它并从另一个源中获取其他数据

Cookieoff幸运-这看起来很有用,谢谢。

Flex有一个类。从问题描述的外观来看,我认为应该创建多个这样的对象,并将它们绑定到不同的事件处理程序——这取决于对特定请求的处理类型

<mx:HTTPService url="{myURL}" id="myHTTPData" method="GET" 
                result="cacheData()" fault="downloadFault" 
                resultFormat="object">

<mx:HTTPService url="{myURL2}" id="mySessKey" method="GET" 
                result="saveSessKey()" fault="authFault" 
                resultFormat="object">

最好在HTTPService周围创建一个自定义包装器,并使用它们。这将允许您使用自定义事件处理程序轻松创建对象(并在完成后释放它们)。

Flex有一个类。从问题描述的外观来看,我认为应该创建多个这样的对象,并将它们绑定到不同的事件处理程序——这取决于对特定请求的处理类型

<mx:HTTPService url="{myURL}" id="myHTTPData" method="GET" 
                result="cacheData()" fault="downloadFault" 
                resultFormat="object">

<mx:HTTPService url="{myURL2}" id="mySessKey" method="GET" 
                result="saveSessKey()" fault="authFault" 
                resultFormat="object">


最好在HTTPService周围创建一个自定义包装器,并使用它们。这将允许您使用自定义事件处理程序轻松创建对象(并在完成后释放它们)。

如何通过原始ActionScript套接字API进行连接?您可以根据需要读取数据并分派事件,每个事件都会触发一个单独的HTTPService调用以获取数据。

通过原始ActionScript套接字API连接怎么样?您可以根据需要读取数据并分派事件,每个事件都会触发一个单独的HTTPService调用以获取数据。

使用HTTPService的send()方法时,将返回一个AsyncToken。您可以使用AsyncToken同步事件

private function streamResultHandler(event:ResultEvent):void
{
    ...
    for(var str : frame)
    {
        if(str == "getEncryptionKey")
        {
            var token:AsyncToken = keyHTTPService.send();
            var tokenResult:Object = token.result;
            var key = keyBuffer;
            ...
        }
    }
}

private function keyHTTPServiceResultHandler(event:ResultEvent):void
{
    keyBuffer = event.result;
}

当您使用HTTPService的send()方法时,将返回一个AsyncToken。您可以使用AsyncToken同步事件

private function streamResultHandler(event:ResultEvent):void
{
    ...
    for(var str : frame)
    {
        if(str == "getEncryptionKey")
        {
            var token:AsyncToken = keyHTTPService.send();
            var tokenResult:Object = token.result;
            var key = keyBuffer;
            ...
        }
    }
}

private function keyHTTPServiceResultHandler(event:ResultEvent):void
{
    keyBuffer = event.result;
}