Тайм-аут Nginx для веб-сокета
Я подключаю клиента с помощью websocket через Nginx (в качестве обратного прокси) к основному приложению asp.net. Между сервером и клиентом имеются команды пульса, чтобы поддерживать соединение веб-сокета открытым.
Моя проблема заключается в том, что когда клиент отключается, отсоединив сетевой кабель, соединение остается открытым. Я хотел бы установить тайм-аут, что, когда клиент не отправляет ничего в течение определенного времени, соединение закрывается.
Я пробовал несколько таймаутов без какого-либо эффекта. (proxy_send_timeout
, client_body_timeout
, keepalive_timeout
, send_timeout
...) Единственное время ожидания, которое мне удалось установить, было proxy_read_timeout
, Что мне не понравилось, так это то, что этот таймаут сбрасывался каждый раз, когда сервер отправлял что-либо (а не клиент).
Какой тайм-аут мне нужно установить, чтобы отключить клиента, если клиент ничего не отправляет в течение x секунд?
Большое спасибо заранее!
1 ответ
Я думаю, что вы также должны проверить тайм-аут системы,
Для Linux на основе.
/proc/sys/net/ipv4/tcp_keepalive_time
/proc/sys/net/ipv4/tcp_keepalive_intvl
/proc/sys/net/ipv4/tcp_keepalive_probes
/proc/sys/net/ipv4/tcp_retries2
Для окон на основе,
HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services: \Tcpip \Parameters
TcpInitialRTT: Defines what the initial time-out settings are for new connections. This number in seconds is doubled each time it retransmits before timing a connection out. Defaults to 3.
TcpMaxConnectRetransmissions: Defines the number of retransmissions before timing a connection out. Defaults to 5.