send_timeout
Директива `send_timeout` задаёт таймаут передачи ответа клиенту.
Описание
Директива send_timeout используется в модуле NGINX RTMP для определения максимального времени, которое сервер будет тратить на отправку данных клиенту, прежде чем считать соединение прерванным из‑за таймаута. Если время, затраченное на отправку ответа, превышает этот предел, сервер закроет соединение. Это особенно полезно в сценариях потоковой передачи мультимедиа, где часто используются длительные соединения и необходимо эффективно управлять ресурсами.
Директива принимает один параметр, задающий длительность таймаута. Этот параметр можно указывать в секундах или с суффиксом, например 'm' для минут или 'h' для часов. Важно отметить, что этот таймаут применяется только тогда, когда соединение остаётся открытым, но сервер не отправляет данные; если данные передаются, таймаут не срабатывает. Правильная настройка этого значения может помочь избежать проблем с клиентскими соединениями в сетях с высокой задержкой или в периоды бездействия во время потока.
При настройке send_timeout важно учитывать ожидаемое поведение потоковых клиентов. Слишком короткий таймаут может преждевременно прерывать клиентов во время продолжительной обработки, тогда как слишком длинный таймаут может удерживать ресурсы сервера дольше, чем необходимо, позволяя накапливаться слишком большому числу соединений в пиковые периоды. Поэтому часто рекомендуется протестировать разные значения, чтобы найти оптимальную настройку для конкретного сценария потоковой передачи.
Пример конфига
rtmp {
server {
application live {
live on;
send_timeout 30s;
}
}
}Убедитесь, что указанное значение таймаута не слишком короткое, так как это может привести к преждевременному отключению клиентов.
Помните, что send_timeout применяется только к неотзывчивым соединениям; если данные передаются, этот таймаут не срабатывает.
Если несколько приложений работают с разными таймаутами, убедитесь, что send_timeout задан в правильном контексте, чтобы избежать путаницы.