2016-01-14 3 views
1

Я следующий поток:Асинхронный вызова другой метод в Синатры

upload big file and send token 
    | 
    V 
save uploaded file temporary 
    | 
    V 
response that file was correctly uploaded 
    | 
    V 
callback that checks is file is valid 
    | 
    V 
after validation make http request to defined address with token and 
validation result, delete temporary file 

Как это лучший способ осуществить это в Синатра?

только одно решение, которое я нашел, использовать что-то вроде этого: sinatra_run_later

Существует что-то еще, чтобы справиться с этим делом?

ответ

0

Один образец, который я использую для таких вещей, как фоновый пул потоков. Обратите внимание, что я использую веб-сервер puma, он может работать не со всеми остальными.

Идея заключается в том, что в маршруте загрузки перед ответом вы добавляете код в постоянный фоновый поток, который будет выполнять проверку и HTTP-запрос. Пустота я беру с жемчужины thread.

Минимальный пример:

require 'sinatra/base' 
require 'thread/pool' 

class Threadexample < Sinatra::Application 
    class << self; attr_accessor :pool end # thread pool as class variable 
    @pool = Thread.pool(2) 

    post '/upload' do 
     … 
     # right before responding 
     Threadexample::pool.process { 
      # Add code that does the validation and the request 
     } 
    end 
end 

Посмотрите thesetwo файлов для реального примера жизни.

Смежные вопросы