Real heartbeat timeouts server -> client
This commit is contained in:
3
main.go
3
main.go
@@ -623,8 +623,7 @@ func writeInitial(client *client, w http.ResponseWriter, flusher http.Flusher) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func writeHeartbeat(w http.ResponseWriter, flusher http.Flusher) {
|
func writeHeartbeat(w http.ResponseWriter, flusher http.Flusher) {
|
||||||
fmt.Fprintf(w, ":\n\n")
|
writeEvent(&event{}, w, flusher)
|
||||||
flusher.Flush()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeEvent(e *event, w http.ResponseWriter, flusher http.Flusher) {
|
func writeEvent(e *event, w http.ResponseWriter, flusher http.Flusher) {
|
||||||
|
|||||||
@@ -74,7 +74,15 @@ function watch(roomId, clientId, adminSecret, prnt) {
|
|||||||
}
|
}
|
||||||
function createEventSource(url) {
|
function createEventSource(url) {
|
||||||
const es = new EventSource(url.toString());
|
const es = new EventSource(url.toString());
|
||||||
|
let lastMessage = performance.now();
|
||||||
|
const intId = setInterval(() => {
|
||||||
|
if (performance.now() - lastMessage > 10000) {
|
||||||
|
console.warn("timeout");
|
||||||
|
es.dispatchEvent(new Event("error"));
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
es.addEventListener("open", () => {
|
es.addEventListener("open", () => {
|
||||||
|
console.info("connected");
|
||||||
messageBus.dispatchEvent(new Event("open"));
|
messageBus.dispatchEvent(new Event("open"));
|
||||||
});
|
});
|
||||||
es.addEventListener("message", (e) => {
|
es.addEventListener("message", (e) => {
|
||||||
@@ -82,10 +90,12 @@ function createEventSource(url) {
|
|||||||
data: e.data,
|
data: e.data,
|
||||||
lastEventId: e.lastEventId,
|
lastEventId: e.lastEventId,
|
||||||
}));
|
}));
|
||||||
|
lastMessage = performance.now();
|
||||||
});
|
});
|
||||||
es.addEventListener("error", () => {
|
es.addEventListener("error", () => {
|
||||||
console.warn("disconnected");
|
console.warn("disconnected");
|
||||||
es.close();
|
es.close();
|
||||||
|
clearInterval(intId);
|
||||||
setTimeout(() => createEventSource(url), 3000);
|
setTimeout(() => createEventSource(url), 3000);
|
||||||
messageBus.dispatchEvent(new Event("error"));
|
messageBus.dispatchEvent(new Event("error"));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -159,7 +159,17 @@ function watch(roomId: string, clientId: string, adminSecret: string | null, prn
|
|||||||
function createEventSource(url: URL) {
|
function createEventSource(url: URL) {
|
||||||
const es = new EventSource(url.toString());
|
const es = new EventSource(url.toString());
|
||||||
|
|
||||||
|
let lastMessage = performance.now();
|
||||||
|
|
||||||
|
const intId = setInterval(() => {
|
||||||
|
if (performance.now() - lastMessage > 10000) {
|
||||||
|
console.warn("timeout");
|
||||||
|
es.dispatchEvent(new Event("error"));
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
es.addEventListener("open", () => {
|
es.addEventListener("open", () => {
|
||||||
|
console.info("connected");
|
||||||
messageBus.dispatchEvent(new Event("open"));
|
messageBus.dispatchEvent(new Event("open"));
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -168,11 +178,16 @@ function createEventSource(url: URL) {
|
|||||||
data: e.data,
|
data: e.data,
|
||||||
lastEventId: e.lastEventId,
|
lastEventId: e.lastEventId,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
lastMessage = performance.now();
|
||||||
});
|
});
|
||||||
|
|
||||||
es.addEventListener("error", () => {
|
es.addEventListener("error", () => {
|
||||||
console.warn("disconnected");
|
console.warn("disconnected");
|
||||||
|
|
||||||
es.close();
|
es.close();
|
||||||
|
clearInterval(intId);
|
||||||
|
|
||||||
setTimeout(() => createEventSource(url), 3000);
|
setTimeout(() => createEventSource(url), 3000);
|
||||||
|
|
||||||
messageBus.dispatchEvent(new Event("error"));
|
messageBus.dispatchEvent(new Event("error"));
|
||||||
|
|||||||
Reference in New Issue
Block a user