From 09a608291779079d233016ce10c12e1e114d5b07 Mon Sep 17 00:00:00 2001 From: DmitriyA Date: Tue, 3 Jun 2025 05:58:27 -0400 Subject: [PATCH] websocket fix --- src/Charts2/Components/metricsService.jsx | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/Charts2/Components/metricsService.jsx b/src/Charts2/Components/metricsService.jsx index 78b2e9a..0550ba0 100644 --- a/src/Charts2/Components/metricsService.jsx +++ b/src/Charts2/Components/metricsService.jsx @@ -6,6 +6,8 @@ class MetricsService { this.socket = null; this.subscriptions = new Map(); this.pendingRequests = new Map(); + window.addEventListener('beforeunload', this.cleanupAll.bind(this)); + window.addEventListener('pagehide', this.cleanupAll.bind(this)); window.addEventListener('beforeunload', () => { this.cleanupAll(); @@ -89,14 +91,9 @@ class MetricsService { subscribeToMetric(metricKey, callback, interval = 5000, filters = {}) { this.connectWebSocket(); - - const alreadySubscribed = this.subscriptions.has(metricKey); - const callbacks = this.subscriptions.get(metricKey) || []; - callbacks.push(callback); - this.subscriptions.set(metricKey, callbacks); - - if (!alreadySubscribed) { - // Разделяем metricKey на метрику и фильтры + + if (!this.subscriptions.has(metricKey)) { + this.subscriptions.set(metricKey, []); const [metric] = metricKey.split('?'); this.socket.emit('subscribe-metric', { metric, @@ -104,8 +101,13 @@ class MetricsService { filters }); } - - return () => this.unsubscribeFromMetric(metricKey, callback); + + const callbacks = this.subscriptions.get(metricKey); + callbacks.push(callback); + + return () => { + this.unsubscribeFromMetric(metricKey, callback); + }; } unsubscribeFromMetric(metricKey, callback) {