【发布时间】:2012-07-16 14:31:12
【问题描述】:
我有一个 Flex 应用程序,它在浏览器中运行,并且作为 AIR 的独立应用程序运行。在我们的应用程序中,您可以下载在服务器端生成的包含报告的 zip 文件。这个 zip 文件可能非常大(数 GB)并且需要一段时间才能下载。基本上,我们从客户端执行 HTTP POST:
m_file = new FileReference();
m_file.download( request, filename );
另一方面,我们每 15 秒从客户端向服务器发送一次 ping,以确保服务器仍然存在。服务器用他的名字响应 ping。当我们在 30 秒内没有收到响应时,我们会向用户显示服务器已关闭的消息。
现在,实际的问题是,在我们下载报告时,对服务器的 ping 请求永远不会被发送。奇怪的是,这只发生在 Windows 上的 Adobe AIR 中。这不是在 Windows 上的 Firefox 上的问题。这也不是在 Mac OS X 上使用 AIR 的问题。
我在 ping 操作周围放置了一些日志来显示它:
[trace] 1: Mon Jul 16 16:00:20 GMT+0200 2012
[trace] return : 1: Mon Jul 16 16:00:20 GMT+0200 2012
[trace] 2: Mon Jul 16 16:00:35 GMT+0200 2012
[trace] return : 2: Mon Jul 16 16:00:35 GMT+0200 2012
[trace] 3: Mon Jul 16 16:00:50 GMT+0200 2012
[trace] return : 3: Mon Jul 16 16:00:50 GMT+0200 2012
[trace] 4: Mon Jul 16 16:01:05 GMT+0200 2012
[trace] 5: Mon Jul 16 16:01:20 GMT+0200 2012
[trace] 6: Mon Jul 16 16:01:35 GMT+0200 2012
[trace] 7: Mon Jul 16 16:01:50 GMT+0200 2012
[trace] fault 4: Mon Jul 16 16:02:05 GMT+0200 2012
[trace] fault 5: Mon Jul 16 16:02:05 GMT+0200 2012
[trace] fault 6: Mon Jul 16 16:02:05 GMT+0200 2012
[trace] fault 7: Mon Jul 16 16:02:05 GMT+0200 2012
[trace] 8: Mon Jul 16 16:02:05 GMT+0200 2012
[trace] fault 8: Mon Jul 16 16:02:20 GMT+0200 2012
[trace] 9: Mon Jul 16 16:02:21 GMT+0200 2012
Player session terminated
[AIR Debug Launcher]: Process finished with exit code 1
您可以看到操作 1、2 和 3 运行良好并立即返回。此时,我们开始下载报告。注意操作 4 不会立即返回。 15 秒后,操作 5 开始,然后是 6 和 7,各间隔 15 秒。 然后突然,恰好在 1 分钟后,操作 4 像在那一分钟内启动的所有其他请求一样返回到故障处理程序。
请注意,在后台,只要 AIR 应用程序继续运行,HTTP POST 就会继续运行(通过Charles 进行检查)。 ping 请求本身不会显示在 charles 中,如果我启用它,我也不会在 BlazeDS 调试日志中看到它们。就像 AIR 应用程序甚至从未尝试在服务器上执行 ping 请求。
有没有人知道可能出了什么问题?还有什么我可以检查/调试的东西吗?
我正在使用 Flex SDK 4.5 和 Adobe AIR 3.3
【问题讨论】:
标签: apache-flex air