В чем разница между тайм-аутом простоя и тайм-аутом запроса в конфигурации akka http?

Я зашел в документацию и нашел эти # Время, по истечении которого неактивное соединение будет автоматически закрыто. # Установите значение infinite, чтобы полностью отключить тайм-ауты простоя соединения. тайм-аут простоя = 10 с

# Defines the default time period within which the application has to
# produce an HttpResponse for any given HttpRequest it received.
# The timeout begins to run when the *end* of the request has been
# received, so even potentially long uploads can have a short timeout.
# Set to `infinite` to completely disable request timeout checking.
#
# If this setting is not `infinite` the HTTP server layer attaches a
# `Timeout-Access` header to the request, which enables programmatic
# customization of the timeout period and timeout response for each
# request individually.
request-timeout = 20 s

У меня есть сценарий, когда моему серверу требуется более 10 секунд для обработки ответа, но перед отправкой HTTPResponse TCP-соединение между клиентом и сервером истекает по тайм-ауту из-за тайм-аута простоя.

Хотя соединение в данный момент неактивно, запрос все еще обрабатывается.

Я думал, что это ответственность тайм-аута ответа?

Может ли кто-нибудь в этом контексте объяснить мне разницу между тайм-аутом простоя и тайм-аутом ответа?


person Atiq    schedule 22.06.2017    source источник


Ответы (2)


Документация немного сбивает с толку, я провел эксперименты на ее основе:

idle-timeout: это максимальное время бездействия соединения. Он ведет себя так же, как тайм-аут запроса. Пример :

тайм-аут простоя = 1 с

Приложение отправило запрос стороннему API, и соединение установлено, но третья сторона не отвечает. Затем вы получите исключение Timeout.

"akka.stream.scaladsl.TcpIdleTimeoutException"

connecting-timeout: 500 мс. Указывает максимальное время (500 мс), в течение которого должно быть установлено HTTP-соединение.

person Shiva Garg    schedule 18.06.2020

Из документации и подробнее здесь

  # The idle timeout for an open connection after which it will be closed
  # Set to null or "infinite" to disable the timeout, but notice that this
  # is not encouraged since timeout are important mechanisms to protect your
  # servers from malicious attacks or programming mistakes.
  idleTimeout = 75 seconds

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

person user1242321    schedule 20.01.2018