From 84a80fe5b56055aaa5827f9f8e1bf8bd60331ee6 Mon Sep 17 00:00:00 2001 From: undefined Date: Sat, 1 Apr 2023 22:34:37 +0800 Subject: [PATCH] core&ui: websocket: add reversed heartbeat --- packages/hydrooj/src/service/server.ts | 4 +++- packages/ui-default/components/socket/index.ts | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index a0f8ee12e..eeedd1723 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -385,10 +385,12 @@ export function Connection( for (const { name, target } of h.__subscribe || []) disposables.push(bus.on(name, target.bind(h))); let lastHeartbeat = Date.now(); const interval = setInterval(() => { - if (Date.now() - lastHeartbeat > 40000) conn.close(4000, 'Heartbeat timeout'); + if (Date.now() - lastHeartbeat > 80000) conn.close(4000, 'Heartbeat timeout'); + if (Date.now() - lastHeartbeat > 30000) conn.send('ping'); }, 40000); conn.onmessage = (e) => { lastHeartbeat = Date.now(); + if (e.data === 'pong') return; if (e.data === 'ping') { conn.send('pong'); return; diff --git a/packages/ui-default/components/socket/index.ts b/packages/ui-default/components/socket/index.ts index 850379c04..25933fb4d 100644 --- a/packages/ui-default/components/socket/index.ts +++ b/packages/ui-default/components/socket/index.ts @@ -26,6 +26,10 @@ export default class Sock { }; this.sock.onmessage = (message) => { if (message.data === 'pong') return; + if (message.data === 'ping') { + this.sock.send('pong'); + return; + } if (process.env.NODE_ENV !== 'production') console.log('Sock.onmessage: ', message); const msg = JSON.parse(message.data); if (msg.error === 'PermissionError' || msg.error === 'PrivilegeError') this.close();