2016-06-12 60 views
0

我正在构建一个REST风格的后端Web服务,它将预生成的数据blob提供给前端站点。 blob本身并不大,并且可以在单个HTTP响应/请求中轻松满足。后端是用PHP编写的。正确处理长时间运行的HTTP进程

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

我想进行如下操作: - 发送的初始请求是“再生所有斑点” - 处理开始时,没有响应,直到所有已完成(HTTP 200,所有没说的)或I达到一个内部时间限制 - 如果达到了时间限制,我想发送一个响应,指出处理是不完整的(哪个HTTP状态是合适的,因为处理成功,但不完整? - 206不适用没有范围标题... ),以便客户可以请求继续。我可以想象返回的数据表明“请继续”请求应该是什么(最好在链接头中完成?) - 客户端然后请求继续,并且循环继续,直到信号完全成功为止。

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

感谢您的任何好点子!

回答

0

我对Range标题做了相当多的研究,得出的结论是关于使用不是“字节”的范围单元的效果没有足够的共识。尽管HTTP状态200,206和416具有有用的含义。请参阅http://otac0n.com/blog/2012/11/21/range-header-i-choose-you.html以获得一个很好的总结。

因此,我最终编写了一个特殊情况解决方案,并在每个响应中发出结果,表明是否重新运行带有“resume”值的查询,以便跳过已处理的斑点。

如果Range的东西也允许“items”作为单位 - 这将使简单的集合可以通过头部参数进行处理,而不会额外重载URI。

+0

另请参阅http://stackoverflow.com/questions/1434647/using-the-http-range-header-with-a-range-specifier-other-than-bytes和FloO链接在StackOverflow博客圈 –

相关问题