У меня есть простое приложение Синатры с один длинный Продолжительность маршрута:Как разрешить одновременный доступ к тому же маршруту?
get '/jobs/new' do
logger.info "jobs/new start. Thread = #{Thread.current.inspect}"
sleep 10
logger.info "end new..."
erb :'jobs/new'
end
get '/jobs' do
erb :'jobs/index'
end
Я одновременный доступ между маршрутами, но не до такой же маршрут.
Примером является, в то время как клиент вызывает /jobs/new
(длинный во время доступа), другой клиент может ссылаться на jobs
параллельно. Но параллельный вызов для того же маршрута не работает. В этом случае, Puma, веб-сервер, всегда вызывает маршрут с одной и той же теме:
jobs/new started. Thread = #<Thread:0x007f42b128e600 run>
10 seconds later...
jobs/new ended. Thread = #<Thread:0x007f42b128e600 run>
jobs/new started. Thread = #<Thread:0x007f42b128e600 run> <-- new call. Has to wait till first has finished
Другой путь который вызывается разными потоками. И в то время как маршрут 1 работает:
jobs/new started. Thread = #<Thread:0x007f42b128e600 run>
2 seconds later...
jobs started. Thread = #<Thread:0x007f541f581a40 run> <--other thread
8 seconds later...
jobs/new ended. Thread = #<Thread:0x007f42b128e600 run>
jobs/new started. Thread = #<Thread:0x007f42b128e600 run>
Я попытался запустить приложение с Thin в многопоточном режиме и с Puma, с таким же поведением
Это не обязательно, и не рекомендуется добавлять ключевые слова в заголовки, если они не являются частью нормальной структуры предложения заголовка. Ключевые слова, такие как «Синатра:», не используются поисками, а также не помогают ключевому ракурсу вопроса. Вместо этого они уменьшают читаемость заголовка. Ключевые слова и поисковые запросы происходят на основе тегов, которые вы добавляете к вопросу. –