Skip heartbeat if there is no response

This commit is contained in:
Paweł Jastrzębski 2021-04-23 19:15:13 +02:00
parent 351efff147
commit ea893b2322

View File

@ -8,11 +8,18 @@
var Shynet = { var Shynet = {
idempotency: null, idempotency: null,
heartbeatTaskId: null, heartbeatTaskId: null,
skipHeartbeat: false,
sendHeartbeat: function () { sendHeartbeat: function () {
try { try {
if (document.hidden) { if (document.hidden) {
return; return;
} }
if (Shynet.skipHeartbeat) {
console.warn("Heartbeat skipped due to lack of server response");
return;
}
Shynet.skipHeartbeat = true;
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open( xhr.open(
"POST", "POST",
@ -20,6 +27,12 @@ var Shynet = {
true true
); );
xhr.setRequestHeader("Content-Type", "application/json"); xhr.setRequestHeader("Content-Type", "application/json");
xhr.onload(function () {
Shynet.skipHeartbeat = false;
});
xhr.onerror(function () {
Shynet.skipHeartbeat = false;
});
xhr.send( xhr.send(
JSON.stringify({ JSON.stringify({
idempotency: Shynet.idempotency, idempotency: Shynet.idempotency,
@ -37,6 +50,7 @@ var Shynet = {
clearInterval(Shynet.heartbeatTaskId); clearInterval(Shynet.heartbeatTaskId);
} }
Shynet.idempotency = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); Shynet.idempotency = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
Shynet.skipHeartbeat = false;
Shynet.heartbeatTaskId = setInterval(Shynet.sendHeartbeat, parseInt("{{heartbeat_frequency}}")); Shynet.heartbeatTaskId = setInterval(Shynet.sendHeartbeat, parseInt("{{heartbeat_frequency}}"));
Shynet.sendHeartbeat(); Shynet.sendHeartbeat();
} }