server: fix: stop sending pings on every pong #386
|
@ -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);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue