如果REST请求可能需要10分钟

时间:2015-02-21 21:17:58

标签: php rest azure

我即将实现REST服务器(在ASP.NET中虽然我认为这与此无关)。我想要做的是发出请求并返回结果。但是,这个结果是一个.XLSX文件,可能是一百万行。

如果我要生成一百万行电子表格,那么大约需要10分钟。 http请求将超时。那么什么是处理结果延迟的最佳方式。

其次,返回一个非常大的文件作为REST结果的最佳方法是什么?

更新:最常见的用例是REST服务器是Azure云服务Web工作者(基本上是Azure上的IIS)。客户端是在不同位置的不同服务器上运行的PHP Web应用程序。 PHP Web应用程序需要发送报告模板(通常为25K),数据可以是SQL数据库的连接字符串,或者......可以是500M XML文件。这就是请求,一个包含模板和数据源的XML文件。

文件的响应 - PDF,DOCX,XLSX,PPTX或HTML。这可以是XML文件中的BLOB,也可以是文件本身。如果出现错误,则必须返回带有错误信息的XML。最大的问题是,如果一切正常,可能需要10分钟才能生成此文件。当它是一个100万行电子表格时,需要时间来下载所有数据并填充创建的XLSX文件。第二个问题,这是一个非常大的文件。

所以即使一切都很完美,也会有很大的延迟和很大的反应。

2 个答案:

答案 0 :(得分:1)

我看到两个选项:

  • 在生成期间将文件写入响应流(从客户端,这看起来像下载大文件);
  • 在服务器端启动文件生成任务,立即返回任务ID。添加API方法,允许检索任务状态,取消或获取结果(如果任务已完成)。

答案 1 :(得分:0)

有趣的问题, 我确定希望你有一个稳定的连接,无论如何,在客户端,在这种情况下,PHP,将超时设置为非常高的值。在PHP中 参数或者set_time_limit(3600 * 10); curl_setopt($ curlh,CURLOPT_TIMEOUT,3600 * 10);