You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Connection resilience: reconnection behavior after network loss
User story
As an operator running dashboards on always-on screens, I want a screen that lost the server to recover on its own, so that nobody has to walk the floor after a network blip or a server restart.
Product Requirements
Release headline
📶 Connection resilience
Pillar
Build
Packaging
All — open source npm package, no tier or feature flag
50 displays showing dashboards. Server maintenance takes it offline for ten minutes. All 50 screens attempt a refresh, land on ERR_NAME_NOT_RESOLVED, and each one then needs a manual touch to come back.
The complaint is the blind refresh, not the retry timing — "blindly refreshing the page without the server even being alive".
Three defects in reconnect():
No jitter. Every client retries on the same schedule — 2.5s ×4, 5s ×10, 30s ×8 — so 50 screens hit the server in lockstep.
It gives up. After MAX_RETRIES (22, ~5 min) forcePageReload() hard-reloads. If the server is still down the screen lands on a browser error page and stays there.
Undesirable reconnection behaviour #1344 — retry behaviour.So that a screen left overnight is working in the morning. Jitter, cap the interval rather than the attempt count, no blind reload against a dead server.
Merge order:#2152 → #2078 → #1344 on top. All three edit the same ~20 lines in reconnect() and forcePageReload().
Constraint to preserve: the retry is count-based rather than elapsed-time on purpose. Android suspends the page so timers don't fire, and a count-based scheme retries promptly on wake (noted on #1344).
Connection resilience: reconnection behavior after network loss
User story
Product Requirements
Demo points
The problem
A dashboard that loses its server doesn't recover on its own. On a laptop you refresh. On an always-on display someone walks to the screen.
From #1344:
The complaint is the blind refresh, not the retry timing — "blindly refreshing the page without the server even being alive".
Three defects in
reconnect():MAX_RETRIES(22, ~5 min)forcePageReload()hard-reloads. If the server is still down the screen lands on a browser error page and stays there.parser erroralso force-reloads. The auth-proxy case. The code comment calls the reload a fallback — "it doesn't seem that we can do much other than force a reload" — but PR Handle redirection to login page if session has expired when websocket connection is attempted #2078 shows the redirect can be detected and followed.Child tickets
forcePageReload()ignoreshttpNodeRoot. So that a dashboard on a custom path reloads to itself, not a 404. PR fix: reload dashboard under http node root #2152 open.uiShared.connections; this surfaces it.Merge order: #2152 → #2078 → #1344 on top. All three edit the same ~20 lines in
reconnect()andforcePageReload().Constraint to preserve: the retry is count-based rather than elapsed-time on purpose. Android suspends the page so timers don't fire, and a count-based scheme retries promptly on wake (noted on #1344).