2012-01-02 41 views
0

我使用Google Appengine来运行webapp,并且遇到了一些问题。我需要生成一个非常大的CSV文件并将其发送到客户端。由于最大时间为60秒,并且没有要写入的文件系统,所以我决定使用SJAX(我猜想同步AJAX)从服务器中获取数据块,并对其进行精简,然后将其发送回服务器服务器将其作为CSV文件发送回客户端。很烦人。在同步AJAX调用期间更新GUI

无论如何,这需要很长时间,所以我想我会用一个进度条来检查收到的总共有多少个块。问题是,由于我使用SJAX,孤独的js线程被阻塞。 setTimeout()也被阻止。任何人都知道有任何方法来解决这个问题(GUI部分,我试图找出一个更好的方式来单独处理文件下载)?

编辑:虽然我赞赏谢伊指着我在正确的方向来解决我的问题,我仍然好奇,是否有一种方法可以在SJAX调用期间模拟多线程。

+0

嗯..你不能异步地做请求是不是?这听起来似乎只是在延续传球风格上重写一些连续性的问题。 – hugomg 2012-01-02 12:50:07

回答

3

我将回答有关CSV生成的部分,因为它是您遇到问题的根本原因。

您可以使用任务队列生成数据并将其保存到blobstore或Google云端存储。任务队列有10分钟的处理超时时间,希望应该有足够的时间来生成数据。

您的模式应该是:调用开始生成数据的方法,使用pull检查数据是否准备就绪(或者使用彗星的通道)并在准备就绪的情况下进行下载。

+0

谢谢,我想我会做这样的事情。该项目在1小时内到期,我几个小时前第一次得到它,所以我不想开始搞乱我不熟悉的东西。但我会看看现在:) – Eliezer 2012-01-02 12:46:38

+0

你做到了及时;)? – Rohan 2012-01-02 22:48:47

+0

及时制作:) – Eliezer 2012-01-03 04:08:57