Какова цель async-поддерживается в web.xml? - PullRequest
36 голосов
/ 29 марта 2012
<servlet>
        <description>xxx</description>
        <servlet-name>xxx</servlet-name>
        <servlet-class>com.xxx.yyy</servlet-class>
        <async-supported>true</async-supported>
</servlet>

Какова цель async-supported в файле конфигурации сервлета web.xml? В каком случае я могу его использовать?

Ответы [ 3 ]

47 голосов
/ 16 марта 2013

По иронии судьбы, я искал синтаксис того, как написать это свойство в web.xml tomcat, и это первый поисковый элемент, который я открыл в Google - он тоже написан правильно (работает), так что спасибо.

Чтобы ответить на ваш вопрос, это позволяет сервлету хранить входящие запросы для последующего ответа. Он освобождает поток, используемый для обработки запроса, поэтому его можно использовать в другом месте, пока сервер не будет готов отправить ответ.

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

Этот метод заменяет необходимость в ненужных синхронизированных запросах от клиента для получения данных, которые могут изменяться с неопределенными интервалами. И делает это масштабируемым образом, не цепляясь за нить.


Некоторые примеры использования включают в себя:

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

Приложения электронной почты, позволяющие клиентам просматривать электронную почту, как только они получены почтовым сервером.

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

Вот хороший учебник по этому вопросу. Это также охватывает некоторые гайки и болты в Java.

3 голосов
/ 26 ноября 2015

Основная цель заключается в том, чтобы включить потоковую передачу XHR в качестве резервного механизма для веб-сокетов. Если явно не установлено значение true, ваше приложение не может откатиться до потоковой передачи XHR, что приведет к java.lang.IllegalArgumentException: поддержка асинхронности должна быть включена в сервлете ....

Для получения более подробной информации проверьте здесь (Servlet 3 Async Requests):
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html

Чтобы убедиться, что ваша конфигурация применяется правильно, ограничьте количество подключений wesocket в вашем браузере до 1 и откройте свое приложение на более чем 1 вкладке. Если конфигурация будет применена, у вас будет установлено соединение через websocket на вкладке 1 и потоковая передача hxr на вкладке 2.

1 голос
/ 07 апреля 2015

Если вы используете GlassFish 4.1, попробуйте это в файле src / main / webapp / web.xml:

<servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
...