Я хочу написать что-то похожее на веб-прокси HTTP. В настоящее время я изучаю использование Ruby и Sinatra для этого.
Одна из моих главных забот в связи с этим - возврат HTTP-запроса на другой сервер может занять некоторое время. Как обеспечить, чтобы я мог продолжать обслуживать другие запросы в то же время?
Я создал чрезвычайно надуманный пример, который имитирует блокировку такого типа.
hello.rb:
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", доступ / замедление не помешает доступу / быстрое. Однако, если я развернусь в Heroku, то внезапно запросы к / fast будут ждать, пока запросы к / slow не будут завершены. Я думал, что и локально, и на Heroku, это приложение работает на однопоточном Thin. Я не могу понять, почему у меня другое поведение.
Я довольно новичок во всем этом. Почему я испытываю это непоследовательное поведение? Что может быть хорошим способом для достижения того, что я пытаюсь сделать?
Спасибо!