Назад к вопросам
СБЕР Тех
Junior — Middle
66
Каким образом реализовать обработку долгосрочных HTTP-запросов на сервере?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Для обработки долгосрочных HTTP-запросов на сервере в Java часто используют асинхронные механизмы, чтобы не блокировать поток сервера на время выполнения запроса. Один из распространённых подходов — использование Servlet 3.0 Async API, которое позволяет освободить поток сервера и продолжить обработку запроса в отдельном потоке.
Пример с использованием AsyncContext:
@WebServlet(urlPatterns = "/longtask", asyncSupported = true)
public class LongTaskServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
AsyncContext asyncContext = request.startAsync();
asyncContext.start(() -> {
try {
// Долгая операция
Thread.sleep(5000);
response.getWriter().write("Долгий запрос завершён");
} catch (Exception e) {
e.printStackTrace();
} finally {
asyncContext.complete();
}
});
}
}
Также можно использовать реактивные фреймворки (например, Spring WebFlux) или WebSocket для двунаправленной связи и обработки долгих операций без блокировки.