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

Manually merged
Johann150 merged 1 commit from ignaloidas/FoundKey:reduce-pings into main 2023-05-23 16:13:58 +00:00

View file

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