У меня есть серверная программа, где при получении запроса я делаю вызов RPC через HTTP, на который я не могу потратить больше, чем, скажем, 10 мс. Если запрос не завершается в течение 10 мс, мне нужно прервать, отметьте вызов RPC как неудачный и продолжить с остальной обработкой запросов. Библиотека (AFAIK) не предоставляет никакого способа прервать запрос, если она не завершена в течение некоторого времени. Есть несколько тайм -аутов, например, Тайм-аут сокета, подключение к Timeout и т. Д. Но ни один из них не обеспечивает тайм-аут на общую продолжительность запроса. ScheduledExecutorService httpHardTimeoutScheduler = Executors.newScheduledThreadPool(totalTokenCount);
...
...
public static void postWithHardTimeout(String url, byte[] bytes, ContentType contentType, FutureCallback callback) {
final SimpleHttpRequest request = SimpleRequestBuilder.post(url).build();
request.setBody(bytes, contentType);
Future future = send(request, callback);
httpHardTimeoutScheduler.schedule(() -> {
if (!future.isDone() && !future.isCancelled()) {
future.cancel(true);
}
}, HARD_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
}
< /code>
Это работает, но я вижу увеличение задержек в запросах, которые добиваются успеха, и я пытаюсь отладить его. Моя гипотеза состоит в том, что, поскольку клиент просто перестает слушать, сервер продолжает ждать ответа от клиента и сохраняет и открывает соединение надолго. Должен ли клиент отправлять первое пакет на сервер, чтобы сервер останавливался в ожидании клиента?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... tp-request
Как правильный способ прервать HTTP -запрос? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение