server: fix: stop sending pings on every pong #386

Manually merged
Johann150 merged 1 commits from ignaloidas/FoundKey:reduce-pings into main 2023-05-23 16:13:58 +00:00
1 changed files with 12 additions and 8 deletions

View File

@ -44,18 +44,21 @@ export const initializeStreamingServer = (server: http.Server): void => {
const main = new Connection(socket, ev, user, app);
// ping/pong mechanism
let pingTimeout = null;
function startHeartbeat() {
if (pingTimeout) clearTimeout(pingTimeout);
let pingTimeout: NodeJS.Timeout | null = null;
let disconnectTimeout = setTimeout(() => {
socket.terminate();
}, 60 * SECOND);;
function sendPing() {
socket.ping();
pingTimeout = setTimeout(() => {
socket.terminate();
sendPing();
}, 30 * SECOND);
}
startHeartbeat();
socket.on('ping', () => { startHeartbeat(); });
socket.on('pong', () => { startHeartbeat(); });
function onPong() {
disconnectTimeout.refresh()
}
sendPing();
socket.on('pong', onPong);
// keep user "online" while a stream is connected
const intervalId = user ? setInterval(() => {
@ -75,6 +78,7 @@ export const initializeStreamingServer = (server: http.Server): void => {
redisClient.off('message', onRedisMessage);
if (intervalId) clearInterval(intervalId);
if (pingTimeout) clearTimeout(pingTimeout);
if (disconnectTimeout) clearTimeout(disconnectTimeout);
});
});
});