Perché una connessione tramite WebSocket viene chiusa dopo 60 secondi?
Virtual Private Cloud Infrastruttura classica
Il tuo servizio Ingress espone un'applicazione che utilizza un WebSocket. Tuttavia, la connessione tra un client e la tua applicazione WebSocket viene chiusa quando non viene inviato traffico tra di essi per 60 secondi.
La connessione alla tua applicazione WebSocket potrebbe essere interrotta dopo 60 secondi di inattività per uno dei seguenti motivi:
- La tua connessione Internet ha un proxy o un firewall che non tollerano lunghe connessioni.
- Un timeout nell'ALB all'applicazione WebSocket termina la connessione.
Per evitare che la connessione venga chiusa dopo 60 secondi di inattività:
-
Se stabilisci una connessione alla tua applicazione WebSocket tramite un proxy o un firewall, assicurati che il proxy o il firewall non siano configurati per terminare automaticamente le connessioni lunghe.
-
Per mantenere attiva la connessione, puoi aumentare il valore del timeout oppure configurare un heartbeat nella tua applicazione.
- Modificare il timeout: Aumentare il valore di
proxy-read-timeoutnella configurazione ALB. Per esempio, per cambiare il timeout da60sa un valore maggiore come300s, aggiungere questa annotazione al file di risorse Ingress:nginx.ingress.kubernetes.io/proxy-read-timeout: 300. Il timeout viene modificato per tutti gli ALB pubblici nel tuo cluster. - Impostare un heartbeat: se non si vuole modificare il valore di timeout di lettura predefinito dell'ALB, impostare un heartbeat nell'applicazione WebSocket. Quando si imposta un protocollo heartbeat utilizzando un framework
come WAMP, il server upstream dell'app invia periodicamente un messaggio
pinga un intervallo di tempo prestabilito e il client risponde con un messaggiopong. Impostare l'intervallo di heartbeat a 58 secondi o meno, in modo che il traffico diping/pongmantenga aperta la connessione prima che venga applicato il timeout di 60 secondi.
- Modificare il timeout: Aumentare il valore di