Я разрабатываю серверный элемент управления, чтобы избежать дублирования обработки одного и того же типа запроса на стороне сервера Java. Основной целью является то, что пользователь может наводнить мой серверный процессор, просто нажимая на запрос жесткой обработки повторно. Я разрабатываю сервлет-фильтр для управления потоком запросов, но я могу просто «отменить» второй запрос, возвратив статус HTTP 204, если есть предыдущий запрос, который все еще обрабатывается. С точки зрения сервера, все в порядке. Но веб-браузер будет обрабатывать только этот «прерванный» запрос, а не первый.Можно обменять HTTP-запросы и ответы на среду Java Servlet?
Browser sends request "A"
Server starts to process the request "A"
Browser sends request "B"
Server aborts request "B" (HTTP 204)
Browser receives response "B" (Aborted)
Server finishes the request "A"
Browser does not displays/receives the request "A"
Итак, наконец-то вопрос. Возможно изменение ответа на запрос? Таким образом, я мог избежать дублирования обработки на стороне сервера, и браузер мог отображать запрошенный контент.
Можете ли вы предложить другой подход для решения этой проблемы?
Browser sends request "A"
Server start processing request "A"
Browser sends request "B"
Server "holds" request "B"
Server finishes the request "A"
Server forwards the request "B" to the the response "A"
Server aborts the request "A" (http 204)
Browser displays/receives the request "B" with the response "A" content/headers
Заранее спасибо.
Я бы использовал атмосферу или какую-либо другую структуру websocket. – eduyayo
Здравствуйте, @eduyayo, я согласен с вами, но я ищу подход, который не подразумевает большой редизайн существующего кода. –
mh ... тогда вы должны держать «живым» в сеансе рабочий поток и продолжать кормить его. Аналогичная вещь выполняется в struts2 http://struts.apache.org/release/2.0.x/struts2- core/apidocs/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.html, но вам нужно расширить логику, чтобы продолжать кормить, когда cient снова звонит, чтобы проверить, выполнено ли это – eduyayo