2017-04-06 25 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.