длительные операции в Tomcat - PullRequest
1 голос
/ 12 октября 2009

Существуют ли какие-либо рекомендуемые методы для реализации длительных операций в Tomcat?

например. лучше просто запустить операцию и не дать ответ, пока операция не завершится? Или лучше сразу же вернуться с каким-то билетом, который можно использовать для опроса? (есть ли способ уведомить клиента о завершении?)

Ответы [ 3 ]

2 голосов
/ 12 октября 2009

Вы должны немедленно вернуться со статусом 202 Принято . Наряду с этим HTTP-спецификация согласуется с ответом Джонатана :

Сущность, возвращаемая с этим ответом, ДОЛЖНА включать в себя указание текущего состояния запроса и либо указатель на монитор состояния, либо некоторую оценку того, когда пользователь может ожидать выполнения запроса.

Вы можете установить статус (например, в сервлете), используя:

response.setStatus(HttpServletResponse.SC_ACCEPTED);

Где response - это HttpServletResponse, предоставленный для запроса.

Редактировать (re: comments):

Хорошие браузеры будут рассматривать любой статус 2XX как успешный и отображать контент, предоставленный в теле ответа пользователю, поэтому возвращение 202 не должно влиять на пользователей веб-браузера и то, как они видят страницы. Если браузер этого не делает, возможно, он нарушает Раздел 6.1.1 спецификации:

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

Поскольку сервер Tomcat - это просто специализированный HTTP-сервер, вы должны стараться придерживаться спецификации как можно больше (то есть возвращать как можно более подходящий статус). Даже если вы хотите, чтобы ваш сайт был доступен для браузера, ничто не мешает другим клиентам (curl и т. Д.) Запрашивать страницу. Если вы предоставляете конкретные статусы, клиенты могут действовать более адекватно для ответов.

2 голосов
/ 12 октября 2009

Чтобы ваш сервер не падал и не расстраивал вашего пользователя, определенно предпочтительнее сразу же вернуться, как вы предлагаете, с каким-то «билетом», а затем периодически опрашивать завершение этого билета.

Если это очень длительная операция, вы можете подумать об отправке электронного письма (например, Vimeo, например, когда они перекодировали ваше видео).

1 голос
/ 12 октября 2009

Зависит от того, как долго будет выполняться ваша операция. Я использую оба метода в зависимости от ситуации. У меня есть сервлет для обычного браузера, который ждет несколько секунд и все в порядке, но другой сервлет для доступа с КПК не работает в течение длительного времени, и я отвечаю им. после помещения запроса в очередь. В целом я думаю, что второй способ лучше вообще.

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