Warum wird eine Verbindung über WebSocket nach 60 Sekunden geschlossen?
Virtual Private Cloud Klassische Infrastruktur
Ihr Ingress-Service macht eine App verfügbar, die ein WebSocket verwendet. Die Verbindung zwischen einem Client und Ihrer WebSocket-App wird jedoch geschlossen, wenn für 60 Sekunden kein Datenverkehr zwischen ihnen übertragen wird.
Die Verbindung zu Ihrer WebSocket-App kann aus einem der folgenden Gründe nach 60 Sekunden Inaktivität unterbrochen werden:
- Ihre Internetverbindung beinhaltet einen Proxy oder eine Firewall, der bzw. die eine lange Verbindung nicht toleriert.
- Eine Zeitlimitüberschreitung im ALB an die WebSocket-App beendet die Verbindung.
Gehen Sie wie folgt vor, um zu verhindern, dass die Verbindung nach 60 Sekunden Inaktivität schließt:
-
Wenn Sie über einen Proxy oder eine Firewall eine Verbindung zu Ihrer WebSocket-App herstellen, müssen Sie sicherstellen, dass der Proxy oder die Firewall nicht so konfiguriert ist, dass lange Verbindungen automatisch beendet werden.
-
Um die Verbindung aktiv zu halten, können Sie den Wert des Zeitlimits erhöhen oder einen Heartbeat (Überwachungssignal) in Ihrer App einrichten.
- Zeitlimit ändern: Erhöhen Sie den Wert von
proxy-read-timeout
in der ALB-Konfiguration. Wenn Sie beispielsweise das Zeitlimit von60s
in einen höheren Wert wie300s
ändern möchten, fügen Sie die folgende Annotation zur Ingress-Ressourcendatei hinzu:nginx.ingress.kubernetes.io/proxy-read-timeout: 300
. Das Zeitlimit wird für alle öffentlichen ALBs in Ihrem Cluster geändert. - Heartbeat einrichten: Wenn Sie den Standardwert für das Lesezeitlimit der ALB nicht ändern möchten, müssen Sie in der WebSocket-App einen Heartbeat einrichten. Wenn Sie ein Überwachungssignalprotokoll unter Verwendung eines
Frameworks wie WAMPeinrichten, sendet der Upstream-Server der App in regelmäßigen Abständen eine
ping
-Nachricht in einem Zeitintervall und der Client antwortet mit einerpong
-Nachricht. Setzen Sie das Überwachungssignalintervall auf maximal 58 Sekunden, damit derping/pong
-Datenverkehr die Verbindung offen hält, bevor das 60-Sekunden-Zeitlimit erzwungen wird.
- Zeitlimit ändern: Erhöhen Sie den Wert von