Я подключаю клиента с websocket через Nginx (как обратный прокси) к основному приложению asp.net. Между сервером и клиентом существуют команды пульса, чтобы соединение с веб-сокетом оставалось открытым.
Моя проблема в том, что когда клиент отключается, отсоединяя сетевой кабель, соединение остается открытым. Я хотел бы установить тайм-аут, когда клиент ничего не отправляет в течение определенного времени, соединение закрывается.
Я пробовал несколько тайм-аутов без какого-либо эффекта. (proxy_send_timeout
, client_body_timeout
, keepalive_timeout
, send_timeout
...) Единственный тайм-аут, который мне удалось установить, был proxy_read_timeout
. Что мне не понравилось, так это то, что этот тайм-аут сбрасывался каждый раз, когда сервер что-либо отправлял (а не клиент).
Какой тайм-аут нужно установить для отключения клиента, если клиент ничего не отправляет в течение x секунд?
Большое спасибо заранее!
Я думаю, вам также следует проверить тайм-аут системного tcp,
Для 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
Для Windows,
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.