2016-06-12 59 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博客圈 –

相關問題