From 4aa691d8d7f2d49e6d0a99b1de431ec920e7e24f Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 22 Jan 2025 13:59:45 -0500 Subject: [PATCH] Debounce stream management ack requests So that they don't send after every stanza goes out but only when idle. --- packages/stream-management/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/stream-management/index.js b/packages/stream-management/index.js index 6980585e..9c1a1e9d 100644 --- a/packages/stream-management/index.js +++ b/packages/stream-management/index.js @@ -48,6 +48,7 @@ export default function streamManagement({ }) { let timeoutTimeout = null; let requestAckTimeout = null; + let requestAckDebounce = null; const sm = new EventEmitter(); Object.assign(sm, { @@ -61,6 +62,7 @@ export default function streamManagement({ max: null, timeout: 60_000, requestAckInterval: 30_000, + requestAckDebounce: 100, }); async function sendAck() { @@ -72,6 +74,7 @@ export default function streamManagement({ entity.on("disconnect", () => { clearTimeout(timeoutTimeout); clearTimeout(requestAckTimeout); + clearTimeout(requestAckDebounce); sm.enabled = false; }); @@ -199,7 +202,8 @@ export default function streamManagement({ sm.outbound_q.push({ stanza, stamp: datetime() }); // Debounce requests so we send only one after a big run of stanza together - queueMicrotask(requestAck); + clearTimeout(requestAckDebounce); + setTimeout(requestAck, sm.requestAckDebounce); return next(); });