Танцор: обрабатывать несколько запросов одновременно

Вот моя ситуация: я разрабатываю веб-приложение с использованием фреймворка Dancer, и я хотел бы вставить некоторые данные в базу данных на стороне сервера со стороны браузера. Проблема в том, что когда данных слишком много, загрузка занимает так много времени, что я рассматриваю возможность отображения индикатора выполнения, описывающего прогресс.

Я реализовал это, отправив два запроса: один для публикации данных, а другой опрос статуса. Но кажется, что после обработки первых запросов другие не будут работать, пока не завершится первый. Так статус ничего не возвращает и вдруг 100%. Чтобы справиться с этим, я создаю поток при обработке первых запросов, чтобы основной поток мог вернуться для обработки вторых запросов опроса. Это работает довольно хорошо, пока мне не придется убить некоторый дочерний прогресс, порожденный в дочернем потоке (это еще один вопрос).

Итак, мой вопрос: есть ли какие-либо другие идеи об одновременной обработке нескольких запросов, кроме многопоточного? Как обычно веб-программисты справляются с этой ситуацией?


person Community    schedule 16.05.2013    source источник


Ответы (2)


У вас не должно возникнуть проблем с обработкой нескольких запросов одновременно. Как вы запускаете свое приложение? Если вы используете встроенный сервер (perl your_app.pl), то по умолчанию он однопоточный и будет обрабатывать только один запрос за раз.

Возможно, вы захотите использовать варианты развертывания mutliprocess/multithread, например Starman. Это описано в https://metacpan.org/module/YANICK/Dancer-1.3113/lib/Dancer/Deployment.pod#Running-on-Perl-webservers-with-plackup

person bjakubski    schedule 16.05.2013
comment
Если вы не укажете тип сервера, что по умолчанию использует plackup? - person Relequestual; 26.06.2015
comment
Если автоматическое определение среды не найдет что-то еще (как описано в metacpan.org/pod/Plack::Loader), то я полагаю, что используется HTTP::Server::PSGI. - person bjakubski; 01.07.2015

Я бы начал с приклеивания Dancer к AnyEvent и использования Twiggy для размещения приложения. Поиск в Google выдает это, что выглядит как хорошая отправная точка.

person Oesor    schedule 16.05.2013