我正在通过 Nginx(作为反向代理)将带有 websocket 的客户端连接到 asp.net core 应用程序。服务器和客户端之间有心跳命令来保持 websocket 连接打开。
我的问题是,当客户端通过拔掉网线断开连接时,连接仍保持打开状态。我想设置一个超时时间,当客户端在一定时间内没有发送任何内容时,连接就会关闭。
我尝试了多次超时,但没有任何效果。(proxy_send_timeout
,,,... )我设法设置的唯一超时是。我不喜欢的是,每次服务器发送任何内容(而不是客户端)时,都会重置此超时。client_body_timeout
keepalive_timeout
send_timeout
proxy_read_timeout
如果客户端在 x 秒内没有发送任何内容,我必须设置哪个超时时间才能断开客户端的连接?
提前致谢!
答案1
我认为你还应该检查系统 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.