2016-11-08 3 views
0

Как я обнаружил, контроллеры струна singletones Are Spring MVC Controllers Singletons?Как контроллер Spring MVC обрабатывает несколько длинных HTTP-запросов?

Вопрос заключается в том, как Spring обрабатывает несколько долгое время потребляющих запросы, к тому же отображение? Например, когда мы хотим вернуть модель, которая требует длительных вычислений или подключения к другому серверу, и есть много пользователей, которые отправляют запрос на тот же URL-адрес?

Асинхронные потоки, которые я предполагаю, не являются решением, потому что метод должен заканчиваться до следующего запроса. Или нет..?

+2

Тот факт, что существует один экземпляр, не означает, что он не может обрабатывать сразу несколько запросов ... Таким образом, метод не должен заканчиваться до того, как будет обработан следующий запрос. –

ответ

0

Запросы обрабатываются с использованием пула потоков (управляемый контейнером), поэтому каждый запрос имеет независимый контекст, неважно, является ли контроллер единственным или нет.

Важно то, что экземпляры Singleton НЕ ДОЛЖНЫ разделять состояние между запросами, чтобы избежать неожиданного поведения или условий гонки.

Объём пула потоков определит количество запросов, которые сервер может обрабатывать в модели синхронизации.

Если вы хотите подход асинхронных вы coud использовать множество вариантов, как:

  1. Имея независимый пул потоков, который обрабатывает задачи от контейнерных потоков, или
  2. Используйте очереди, чтобы выдвинуть задачи и использовать процесс планировщика задачи, или
  3. Используйте Websockets, чтобы делать запросы и использовать (1) или (2) для обработки, а затем получать уведомление по завершении.
Смежные вопросы