我有一个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返回到故障处理程序,就像在那1分钟内开始的所有其他请求一样。
请注意,在后台,只要AIR应用程序一直运行,HTTP POST就会一直运行(使用Charles进行检查)。 ping请求本身不会显示在查尔斯中,如果启用它,我也不会在BlazeDS调试日志中看到它们。就像AIR应用程序甚至从未尝试在服务器上执行ping请求一样。
是否有人知道可能出现的问题?我可以检查/调试的其他任何东西吗?
我正在使用Flex SDK 4.5和Adobe AIR 3.3