Flash actionscript 3:加载程序在容易出错的连接上以静默方式失败

Flash actionscript 3:加载程序在容易出错的连接上以静默方式失败,flash,actionscript,loader,silent,Flash,Actionscript,Loader,Silent,我们的Flash应用程序必须从远程目标加载50个左右的文件。在正常网络条件下,这是没有问题的。然而,我们的一些用户开始报告应用程序在加载阶段“停止工作” 在一些测试中,我们将网络质量降低到三分之一的数据包被突发丢弃的程度,我们成功地重现了错误报告。看看firebug,似乎有几个文件(50个文件中的1到3个)开始加载,但从未完成。ActionScript中没有出现错误,也没有明显的文件无法完成的模式 以前有没有人遇到过这种情况,并找到了解决这些情况的原因或方法 编写手动验证加载程序是否停止加载并重

我们的Flash应用程序必须从远程目标加载50个左右的文件。在正常网络条件下,这是没有问题的。然而,我们的一些用户开始报告应用程序在加载阶段“停止工作”

在一些测试中,我们将网络质量降低到三分之一的数据包被突发丢弃的程度,我们成功地重现了错误报告。看看firebug,似乎有几个文件(50个文件中的1到3个)开始加载,但从未完成。ActionScript中没有出现错误,也没有明显的文件无法完成的模式

以前有没有人遇到过这种情况,并找到了解决这些情况的原因或方法

编写手动验证加载程序是否停止加载并重新启动加载过程的内容并不难,但我想知道我们是否只是没有侦听正确的错误事件(现在我们侦听progress、complete和IOErrors),或者是否有其他解决方案

干杯
马克

你是如何处理所有这些装载的?您只是在使用加载器(或的子类,如URLLoader)还是在使用一个库来为您处理所有这些


Greensock's和是我在进行大规模装载时使用的。我最近才开始使用LoaderMax over BulkLoader,因为它有一些很好的功能。

您可能需要注意的一件事是,如果您同时发出所有这些请求,它们的加载可能会超时,并导致您的文件无法加载。服务器通常对它可以提供多少并发请求有限制


因此,管理您的加载是一个很好的实践,这样您就可以一个接一个地加载项目,而不是全部启动并等待它们全部完成

您是否检查过是否维护对装载机的引用?如果将加载器定义为具有弱侦听器的局部变量,则在加载过程完成之前,它们可能会被垃圾收集,并且失败将保持沉默。

确定从其他帐户进行的逾期已久的后续操作

谢谢你的建议。我们有一个解决方案,当服务器无法及时响应或者客户端在X个时间段内不再接收字节时,需要重新安排负载。在最坏的情况下,这将意味着用户将不得不等待更长的时间

但是请求失败的原因仍然是个谜

@Danyal-好建议,我怀疑情况并非如此,因为我们的装载机已得到管理,但我必须进行检查以100%确定

,虽然严格来说不是一个加载库,但有一个示例,其中包括处理错误和超时

下面的代码加载一个XML文档,并在10秒后返回到静态版本(尽管它可以很容易地在两者之间链接另一个XML加载):


我有一个AdobeAirMobile应用程序,它从一个由PHP文件提供的URL加载。我的加载程序会自动失败,并且不会返回任何数据(使用通用加载程序或Greensock)。所以我做了你最后做的事,只是检查一个无声的失败,然后简单地重试。这是可行的,但我意识到这是多么荒谬,加上移动设备上的情况比调试模拟器更糟

以下是我发现的修复方法,至少大大减少了故障数量:

老路: 在我的PHP文件中,我将运行一个数据库查询,将格式化后的数据打包成XML,将任何二进制文件转换为Base64,然后发送头信息,后跟
echo
输出完成的XML

新方式: 我所做的是立即尽快发送标题信息,然后执行PHP
flush()
接着是我的数据库查询、xml打包和编码,然后
echo
输出完成的xml

到目前为止,似乎已经修复了它,我仍然检查失败,但有很多更少

<>我的服务器也有足够的能力处理这些请求,而且我并没有包装一个大的XML来考虑它需要一个初步的刷新。另外,当我从web浏览器加载URL时,一切都会正常工作。这就是为什么我从不认为这是一个问题


我相信它现在被修复的原因是,通过尽快发送头,应用程序知道它的请求已被确认,数据将被接收。http请求的超时时间似乎很短(至少在AS3中是如此),导致了大量的失败。

我看到了一些类似于您所描述的情况,即大量Loader对象的load()方法同时执行。。。如果你还没有,也许可以试着给你的负载排序?谢谢。我一定会调查的。现在,只要客户机代码提供请求,我们就会发送所有请求。实际上,这意味着我们同时发送了50个请求中的40个。您知道为什么发送许多请求会导致这些问题吗?请确保在loader的loaderInfo对象上注册这些事件。并尝试收听httpStatus事件,该事件可能会告诉您出了什么问题,即超时或其他服务器响应。是的,谢谢您的提醒。我们已经在听装货信息了。HTTPStatus也是一个需要添加的东西,尽管Firebug是一个可能没有多大帮助的指示。Firebug在这些资源上只给出了200分。谢谢你的建议。我会告诉你结果如何。我们根据资产类型使用Loader和UrlLoader。这一切都来自一个内部图书馆。谢谢你的建议,我会看看你提到的包裹。也许吧。然而,我们的服务器不是瓶颈。此外,已尝试逐个加载文件,导致无法接受的加载时间。当前的方法加载速度要快得多,但是
Observable.xml(new URLRequest(xmlDocumentURL))
    .timeout(10000, Observable.returnValue(defaultProductCategories))
    .subscribe(function(xml : XML) : void
    {
        trace("Either way, we have an XML document");
    });