Apache flex FLEX的新功能-从Java转换异步通信
我目前正在将一个Java项目翻译成Flex3。该项目的很大一部分涉及异步通信 程序将连接到一个流,开始下载数据。连接后不久,它将需要通过HTTP下载相同格式(关键帧)的上下文数据。在流或关键帧期间的不同点,可能需要额外的HTTP调用,例如获取加密密钥 在Java中,我会使用一个阻塞调用来执行HTTP请求,以获取密钥,该密钥将在HTTP完成时有效地暂停关键帧或流,然后继续执行 不幸的是,Flex是单线程的,HTTP请求是通过异步回调实现的,不可能以同样的方式实现代码 作为Flex的新手,我不确定这方面的常规做法是什么。目前,我计划保存状态并退出,依靠HTTP完成来重新启动暂停的流。或者使用计时器 但是对于流,我是否应该在处理HTTP请求时将接收到的数据与处理数据分离并对其进行缓冲?或者忽略进度事件并让Flex和/或操作系统缓冲它是否安全 有没有人对一种架构有什么建议,可以让这一切变得更容易 谢谢 编辑:感谢您迄今为止的答案 直接地-我不确定我是否理解你的意思,但我会调查的 brd6644-其中一个连接(流)已经是原始套接字。问题是暂停它并从另一个源中获取其他数据 Cookieoff幸运-这看起来很有用,谢谢。Flex有一个类。从问题描述的外观来看,我认为应该创建多个这样的对象,并将它们绑定到不同的事件处理程序——这取决于对特定请求的处理类型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的新手,我不确定这
<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;
}