2014-01-02 3 views
0

Я думаю, я действительно не понимаю понятия асинхронного сервлета. Прежде всего, почему мы должны были отметить asyncSupport = true? Является ли это true/false Я могу создать ThreadPool и добавить к нему задачу, чтобы выполнить эту задачу асинхронно, не так ли? Так в чем же разница, чего я не могу достичь без asyncSupport? Любой пример оценивается.Async Servlet - что он на самом деле дает?

ответ

1

AsyncContext удобно, когда вам нужно поддерживать соединение до тех пор, пока у вас не будет данных, которые будут возвращены через некоторое время в будущем без блокировки потока.

В одном проекте у меня был удаленный клиент, который подключался к серверу и ждал (длинный таймаут) для команды с сервера. Так называемый длинный опрос. После того, как у сервера есть данные для отправки, он принимает AsyncContext и берет ответ. Это очень удобно, поскольку в противном случае нам нужно будет заблокировать поток.

+0

Так, чтобы было ясно. Когда я не использую поддержку async, то использование 'ThreadPool' будет выполнять задачу, но ответ будет отправлен, как только основной поток сервлета достигнет конца метода doGet/doPost, и я не могу сообщить клиенту о результате этого процесса, правильно? С другой стороны, если я использую поддержку async, ответ будет отправлен после завершения работы async. Так что, собственно, с точки зрения браузера нет ничего асинхронного в этом отношении? Как будет обрабатываться запрос на стороне сервера, и этот основной поток Servlet вернется в пул потоков и будет готов к следующему запросу? – abc

+0

Да, это правильно, прежде чем поддержка async ответ будет получен после того, как вы вернетесь из doGet/doPost. Но с асинксом у вас есть выбор. С точки зрения браузера ничего не меняется, это просто более удобный API для обработки запросов на стороне сервера. –

Смежные вопросы