正确处理长时间运行的HTTP进程

时间:2016-06-12 21:23:01

标签: http long-running-processes

我正在构建一个REST风格的Back End Web服务,该服务向前端站点提供预先生成的数据blob。 blob本身并不大,可以在单个HTTP响应/请求中轻松满足。后端是用PHP编写的。

一切正常。难点是斑点再生,当有许多斑点时需要更长的时间。重新生成可能需要比(单独托管的)服务器上的响应超时更长的时间。

我想继续如下: - 发送的初始请求是"重新生成所有blob" - 处理开始,没有响应,直到全部完成(HTTP 200,所有hunky-dory)或我达到内部时间限制 - 如果达到时间限制,我想发送一个响应,表明处理是不完整的(哪个HTTP状态是合适的,因为处理成功,但不完整? - 206不适用于没有Range头...),所以客户端可以请求继续。我可以想象返回数据,表明"请继续"请求应该是(最好在链接头中完成吗?) - 然后客户端请求继续,循环继续,直到发出完全成功信号。

在HTTP客户端 - 服务器交换中发出此类信号的最佳方式是什么?我准备编写一小段Javascript来处理客户端循环。

感谢任何好主意!

1 个答案:

答案 0 :(得分:0)

我对Range标题进行了相当多的研究,得出的结论是,对于使用不是“字节”的范围单位的效果没有达成共识。尽管HTTP状态200,206和416具有有用的含义。有关摘要,请参阅http://otac0n.com/blog/2012/11/21/range-header-i-choose-you.html

所以我最后编写了一个特殊的案例解决方案,每个响应中的结果都表明是否使用“resume”值重新运行查询,该值允许跳过已处理的blob。

如果Range的东西也允许“items”作为单位,这将是很好的 - 这将使得简单的集合能够通过头参数处理,而不会额外重载URI。