diff --git a/packages/server/classes/SSEManager/index.js b/packages/server/classes/SSEManager/index.js index ec7f3628..4c58dabc 100644 --- a/packages/server/classes/SSEManager/index.js +++ b/packages/server/classes/SSEManager/index.js @@ -35,8 +35,6 @@ export default class SSEManager { channel = this.createChannel(channelId) } - channel.clients.add(req) - res.setHeader("Content-Type", "text/event-stream") res.setHeader("Cache-Control", "no-cache") res.setHeader("Connection", "keep-alive") @@ -47,6 +45,14 @@ export default class SSEManager { event: "connected", }) + req.healthPingInterval = setInterval(() => { + this.writeJSONToResponse(res, { + event: "ping", + }) + }, 5000) + + channel.clients.add(req) + if (channel.cache.length > 0) { for (const oldData of channel.cache) { this.writeJSONToResponse(res, oldData) @@ -62,6 +68,8 @@ export default class SSEManager { }) req.on("close", () => { + clearInterval(req.healthPingInterval) + channel.clients.delete(req) if (channel.clients.size === 0) {