1

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

经过一些测试,我们将网络质量降低到 3 个数据包中有 1 个突然丢弃的程度,我们设法重现了错误报告。查看萤火虫,似乎有一些文件(50 个文件中的 1 到 3 个)开始加载但从未完成。ActionScript 中不会引发任何错误,并且文件无法完成的明显模式不存在。

有没有人遇到过这种情况并找到了处理这些情况的原因和/或解决方法?

编写一些手动验证加载程序是否停止加载并重新启动加载过程的东西并不难,但我想知道我们是否只是没有监听正确的错误事件(现在我们监听进度、完成和 IOErrors)或如果有其他解决方案?

干杯马克

4

6 回答 6

1

好的,来自不同帐户的长期逾期跟进。

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

请求静默失败的原因仍然是个谜。

@Danyal - 好建议,我怀疑情况并非如此,因为我们的装载机是受管理的,但我必须检查以确保 100% 确定。

于 2010-08-11T18:07:23.243 回答
1

你是如何处理所有这些加载的?您是在使用 Loaders(或 URLLoader 的子类)还是在使用可以为您处理所有这些的库?

Greensock 的LoaderMaxBulkLoader是我在进行大规模加载时使用的。我最近才开始使用 LoaderMax 而不是 BulkLoader,因为它有一些不错的功能。

于 2010-07-30T03:25:13.193 回答
0

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

于 2010-08-02T17:18:31.340 回答
0

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

以下是我发现的修复或至少大大减轻了故障数量:

旧方法: 在我的 PHP 文件中,我将运行数据库查询,将格式化为 XML 的数据打包,将任何二进制文件转换为 Base64,然后我将发送标题信息,然后echo输出我完成的 XML。

新方法: 我做的就是尽快发送我的头信息,然后做一个PHP,flush();然后是我的数据库查询,xml打包和编码,然后echo输出完整的XML。

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

我的服务器也有足够的能力处理这些请求,而且我没有打包那么大的 XML,甚至认为它需要初步刷新。另外,当我从 Web 浏览器加载该 URL 时,一切正常,始终如一。这就是为什么我从不认为这是一个问题。

我相信它现在被修复的原因是因为通过尽快发送标头,应用程序知道它的请求已被确认并且数据将会到来。看起来 http 请求的超时时间非常短暂(至少在 AS3 中),导致大量失败。

于 2012-07-09T19:40:57.160 回答
0

raix虽然严格来说不是一个加载库,但有一个加载多个 XML 文档并输出类型值的示例,其中包括处理错误和超时。

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

Observable.xml(new URLRequest(xmlDocumentURL))
    .timeout(10000, Observable.returnValue(defaultProductCategories))
    .subscribe(function(xml : XML) : void
    {
        trace("Either way, we have an XML document");
    });
于 2010-08-11T18:13:42.080 回答
0

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

因此,管理加载是一种很好的做法,以便您一个接一个地加载项目,而不是全部启动它们并等到它们全部完成。

于 2010-07-30T04:57:04.610 回答