2015-01-08 3 views
1

У меня есть приложение rails 4, которое имеет некоторые методы, которые выполняют длинный вызов внешнего API. Проблема в том, что эти запросы блокируют все приложение. И одновременно может быть подан только один пользователь (запрос). Это не нужно. Итак, моя идея заключалась в том, что она использовала тонкий веб-сервер, поскольку он предназначен для многопоточности и поддержки параллелизма. Правильно ли, что phusion в его версии с открытым исходным кодом не сможет одновременно запускать несколько запросовКакой сервер для пользователя для рельсов 4 приложения, у которого есть длительные запросы?

Какова наилучшая настройка для такого сценария?

+0

Вы можете настроить открытый доступ к Пассажиру для обработки нескольких одновременных подключений, если вы тратите большую часть ожидающего запроса, это в основном то, что SSE. Вы можете прочитать об этом подробнее: https://www.phusionpassenger.com/library/config/apache/tuning_sse_and_websockets/ –

ответ

0

Я бы настоятельно предложил вам изучить одну из фоновых систем обработки работы (мой личный фаворит - Sidekiq). Выгрузите эти длительные рабочие задания в Sidekiq и перенастройте приложение для размещения (например, вернитесь, чтобы проверить, выполнено ли задание и т. Д.).

+0

Вот что я сделал. Я использовал sidekiq, но это означает, что я должен опросить или передать результаты после вызова api. Но какая польза от того, что у вас тонкий сервер, который позволяет много одновременных соединений? – dc10

+0

Возможно, ничего. На самом деле это зависит от вашего приложения и того, что означает «длительный прием». В какой-то момент клиенты начинают таймаут и т. Д. –

+1

Запросы обычно занимают от 5 до 30 секунд, поэтому тайм-аут не должен быть проблемой. IMHO, опрос или потоковая передача могут быть переструктурированы в этом случае, так как опрос будет постоянно проверять ваше приложение и вызывает еще больше запросов. Поэтому не просто длинные запросы, которые ждут завершения вызова api. – dc10