fix(websocket): keep upgraded WebSocket tunnels on dedicated lifecycle timeouts

This commit is contained in:
2026-05-29 05:27:42 +00:00
parent 72be691668
commit d02b5a45d1
5 changed files with 127 additions and 150 deletions
@@ -154,6 +154,9 @@ pub struct ConnectionConfig {
pub max_connections: u64,
}
const DEFAULT_WS_INACTIVITY_TIMEOUT_MS: u64 = 3_600_000;
const DEFAULT_WS_MAX_LIFETIME_MS: u64 = 86_400_000;
impl Default for ConnectionConfig {
fn default() -> Self {
Self {
@@ -225,8 +228,8 @@ impl TcpListenerManager {
http_proxy_svc.set_connection_timeouts(
std::time::Duration::from_millis(conn_config.socket_timeout_ms),
std::time::Duration::from_millis(conn_config.max_connection_lifetime_ms),
std::time::Duration::from_millis(conn_config.socket_timeout_ms),
std::time::Duration::from_millis(conn_config.max_connection_lifetime_ms),
std::time::Duration::from_millis(DEFAULT_WS_INACTIVITY_TIMEOUT_MS),
std::time::Duration::from_millis(DEFAULT_WS_MAX_LIFETIME_MS),
);
let http_proxy = Arc::new(http_proxy_svc);
let conn_tracker = Arc::new(ConnectionTracker::new(
@@ -266,8 +269,8 @@ impl TcpListenerManager {
http_proxy_svc.set_connection_timeouts(
std::time::Duration::from_millis(conn_config.socket_timeout_ms),
std::time::Duration::from_millis(conn_config.max_connection_lifetime_ms),
std::time::Duration::from_millis(conn_config.socket_timeout_ms),
std::time::Duration::from_millis(conn_config.max_connection_lifetime_ms),
std::time::Duration::from_millis(DEFAULT_WS_INACTIVITY_TIMEOUT_MS),
std::time::Duration::from_millis(DEFAULT_WS_MAX_LIFETIME_MS),
);
let http_proxy = Arc::new(http_proxy_svc);
let conn_tracker = Arc::new(ConnectionTracker::new(
@@ -313,8 +316,8 @@ impl TcpListenerManager {
http_proxy_svc.set_connection_timeouts(
std::time::Duration::from_millis(config.socket_timeout_ms),
std::time::Duration::from_millis(config.max_connection_lifetime_ms),
std::time::Duration::from_millis(config.socket_timeout_ms),
std::time::Duration::from_millis(config.max_connection_lifetime_ms),
std::time::Duration::from_millis(DEFAULT_WS_INACTIVITY_TIMEOUT_MS),
std::time::Duration::from_millis(DEFAULT_WS_MAX_LIFETIME_MS),
);
self.http_proxy = Arc::new(http_proxy_svc);