我写了一个快速(hah)服务器来接受一个JSON有效负载,其中包含从中下载存档的URL。解析JSON后,我下载文件,解压缩并向每行添加元数据。使用大文件可能需要很长时间。
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"]
目前这一切都需要一段时间,并且在整个时间内保持HTTP连接打开。如何立即关闭“stuff”部分并让HTTP服务器关闭其连接?
我已经尝试了一下但是我被卡住了。
答案 0 :(得分:2)
如果您想在开始长时间运行的过程之前向客户端返回响应,那么您是否需要排队系统?我不熟悉Sinatra,我不知道你的用例,但是在Rails中,这通常可以通过Delayed Job,Resque或Sidekiq来实现。
如果这些对你来说太重了,你可以直接用Ruby开始另一个进程laid out in this answer.