Sounds like a service worker, for which there's only one active at a time for all tabs (and can communicate with them) could help with your client side issues.
It looks pretty clever, I wish more websocket frameworks like [2] supported this out of the box (with failovers for safari).
[1] https://dev.to/ayushgp/scaling-websocket-connections-using-s... [2] https://www.npmjs.com/package/hydrated-ws
https://stackoverflow.com/questions/28310501/why-did-safari-...