fix: faster WebSocket reconnect on iOS PWA
- connection timeout after 4s (vs OS TCP default ~75s) - visibilitychange listener: reconnect immediately when app resumes
This commit is contained in:
parent
1b610013c3
commit
c21b6c441c
|
|
@ -607,17 +607,26 @@ export function buildHTML(nonce: string): string {
|
|||
}
|
||||
}
|
||||
|
||||
var ws, timer;
|
||||
var ws, timer, connectTimer;
|
||||
function connect() {
|
||||
if (ws && (ws.readyState === 0 || ws.readyState === 1)) return;
|
||||
clearTimeout(connectTimer);
|
||||
var wsProtocol = location.protocol === "https:" ? "wss:" : "ws:";
|
||||
ws = new WebSocket(wsProtocol + "//" + location.host + "/ws");
|
||||
|
||||
// If not connected within 4s, close and retry immediately
|
||||
connectTimer = setTimeout(function () {
|
||||
if (ws && ws.readyState !== 1) { ws.close(); }
|
||||
}, 4000);
|
||||
|
||||
ws.onopen = function () {
|
||||
clearTimeout(timer);
|
||||
clearTimeout(connectTimer);
|
||||
updateStatus(true);
|
||||
};
|
||||
|
||||
ws.onclose = function () {
|
||||
clearTimeout(connectTimer);
|
||||
updateStatus(false);
|
||||
clearTimeout(timer);
|
||||
timer = setTimeout(connect, 2000);
|
||||
|
|
@ -717,6 +726,14 @@ export function buildHTML(nonce: string): string {
|
|||
});
|
||||
|
||||
connect();
|
||||
|
||||
// Reconnect immediately when app comes back to foreground (e.g. iOS PWA resume)
|
||||
document.addEventListener("visibilitychange", function () {
|
||||
if (document.visibilityState === "visible") {
|
||||
clearTimeout(timer);
|
||||
if (!ws || ws.readyState === 2 || ws.readyState === 3) connect();
|
||||
}
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
|||
Loading…
Reference in New Issue