2017-04-06 69 views
0

我編寫了一個快速(hah)服務器來接受包含從中下載歸檔的URL的JSON有效內容。解析JSON後,我下載文件,解壓縮並向每行添加元數據。對於大文件,這可能需要很長時間。在後臺處理HTTP請求的結果 - Ruby

require 'thin' 
require 'sinatra' 
require 'json' 

set :bind, '0.0.0.0' 

#Listen on port 4567 at /core/action/parse-v1/parse-file for JSON post 
post '/core/action/parse-v1/parse-file' do 
request.body.rewind 
request_payload = JSON.parse request.body.read 

url = request_payload["s3Url"] 
compressionType = request_payload["compressionType"] 
  • 東西,從s3Url拉動文件
  • 東西,解壓縮/焦油-xvf /等的基於compressionType設置
  • 東西,在該文件中創建用於每行一個JSON對象,並將該文件request_payload它
  • 的東西,結果推到一個隊列進行處理 最後完成,發送200返回給客戶端(這可能超時59秒前)。

目前這一切都需要相當長的一段時間,並保持HTTP連接始終打開。如何立即通過「東西」的部分關閉,讓HTTP服務器關閉它的連接?

我已經試驗了一下,但我堅持。

回答

2

如果你想在開始需要長時間運行的過程之前返回到客戶端的響應,也許你需要一個排隊系統?我不熟悉的末日,我不知道你的使用情況,但在Rails的,這是經常的事情如延時工作,Resque,或Sidekiq完成。

如果這些對你來說太重了,你可以直接用Ruby啓動另一個進程,因爲laid out in this answer.