use health ping on sse channels

This commit is contained in:
SrGooglo 2025-04-06 23:20:17 +00:00
parent aded0a30fc
commit ed55ea713b

View File

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