Я хочу написать что-то похожее на веб-прокси HTTP. В настоящее время я изучаю использование Ruby с Sinatra для этого.
Одно из моих главных опасений в связи с этим заключается в том, что HTTP-запрос, который я отправляю на другой сервер, может занять некоторое время, чтобы вернуться. Как убедиться, что я могу продолжать обслуживать другие запросы в то же время?
Я создал крайне надуманный пример, имитирующий такую блокировку.
привет.рб:
require 'rubygems'
require 'sinatra'
set :server, 'thin'
get '/fast' do
'Fast Hello World!'
end
get '/slow' do
sleep 10
'Slow Hello World!'
end
config.ru:
require './hello'
run Sinatra::Application
Что меня совсем сбило с толку, так это то. Если я запущу это локально с помощью «ruby hello.rb», доступ к /slow не помешает доступу к /fast. Однако, если я развернусь на Heroku, то внезапно запросы к /fast будут ждать завершения запросов к /slow. Я думал, что и локально, и на Heroku это приложение работает на однопоточном Thin. Я не могу понять, почему я получаю другое поведение.
Я новичок во всем этом. Почему я испытываю такое непоследовательное поведение? Что было бы хорошим способом выполнить то, что я пытаюсь сделать?
Спасибо!