Adjust WebSocket ping timeout to 15 seconds (#24339)

* Adjust WebSocket ping timeout to 15 seconds

5 seconds was too low to prevent the UI from reloading
when connecting the WebSocket during startup or on
a high latancy connection

This problem presented as the UI reloading over
and over again because it could never respond
to the ping in time on high latancy connections.

At startup it usually only did this once so it
went unnoticed in most cases.

This ping was added in #18934

* Update connection-mixin.ts

Co-authored-by: Jan-Philipp Benecke <jan-philipp@bnck.me>

---------

Co-authored-by: Jan-Philipp Benecke <jan-philipp@bnck.me>
This commit is contained in:
J. Nick Koston 2025-02-20 13:09:51 -06:00 committed by GitHub
parent a7a4194e09
commit 400106ec09
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -286,7 +286,10 @@ export const connectionMixin = <T extends Constructor<HassBaseEl>>(
clearInterval(this.__backendPingInterval); clearInterval(this.__backendPingInterval);
this.__backendPingInterval = setInterval(() => { this.__backendPingInterval = setInterval(() => {
if (this.hass?.connected) { if (this.hass?.connected) {
promiseTimeout(5000, this.hass?.connection.ping()).catch(() => { // If the backend is busy, or the connection is latent,
// it can take more than 10 seconds for the ping to return.
// We give it a 15 second timeout to be safe.
promiseTimeout(15000, this.hass?.connection.ping()).catch(() => {
if (!this.hass?.connected) { if (!this.hass?.connected) {
return; return;
} }
@ -296,7 +299,7 @@ export const connectionMixin = <T extends Constructor<HassBaseEl>>(
this.hass?.connection.reconnect(true); this.hass?.connection.reconnect(true);
}); });
} }
}, 10000); }, 30000);
} }
protected hassReconnected() { protected hassReconnected() {