From 5c7dc76288337641e15202e0c599fe5294d90b63 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Mon, 8 Sep 2025 09:08:42 +0200 Subject: [PATCH] Fix: Verbesserung der Daemon WebSocket-Verbindung und Fehlerbehandlung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Änderung: - Die WebSocket-Verbindung zum Daemon verwendet nun zuerst das 'yourpart-protocol' und versucht bei einem Protokollfehler eine Verbindung ohne Protokoll. - Es wurde eine Retry-Logik mit exponentiellem Backoff hinzugefügt, um die Verbindung bei Fehlern stabiler zu gestalten. - Zusätzliche Protokollausgaben für Fehler- und Verbindungsdetails wurden implementiert, um die Fehlersuche zu erleichtern. Diese Anpassung verbessert die Zuverlässigkeit der WebSocket-Verbindung und die Fehlerdiagnose. --- frontend/src/store/index.js | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js index d15a3e5..c51e013 100644 --- a/frontend/src/store/index.js +++ b/frontend/src/store/index.js @@ -130,11 +130,20 @@ const store = createStore({ } const daemonUrl = import.meta.env.VITE_DAEMON_SOCKET || 'wss://www.your-part.de:4551'; console.log('🔌 Initializing Daemon WebSocket connection to:', daemonUrl); + console.log('🔌 Protocol:', 'yourpart-protocol'); try { - const daemonSocket = new WebSocket(daemonUrl, 'yourpart-protocol'); + // Versuche zuerst mit Protokoll, dann ohne + let daemonSocket; + try { + daemonSocket = new WebSocket(daemonUrl, 'yourpart-protocol'); + } catch (protocolError) { + console.warn('⚠️ Protocol error, trying without protocol:', protocolError); + daemonSocket = new WebSocket(daemonUrl); + } daemonSocket.onopen = () => { console.log('✅ Daemon WebSocket connected successfully'); + retryCount = 0; // Reset retry counter on successful connection const payload = JSON.stringify({ user_id: state.user.id, event: 'setUserId', @@ -145,11 +154,24 @@ const store = createStore({ daemonSocket.onclose = (event) => { console.warn('❌ Daemon WebSocket disconnected:', event.reason); + console.warn('❌ Close details:', { + code: event.code, + reason: event.reason, + wasClean: event.wasClean, + readyState: daemonSocket.readyState + }); retryConnection(connectDaemonSocket); }; daemonSocket.onerror = (error) => { console.error('❌ Daemon WebSocket error:', error); + console.error('❌ Error details:', { + type: error.type, + target: error.target, + readyState: daemonSocket.readyState, + url: daemonSocket.url, + protocol: daemonSocket.protocol + }); retryConnection(connectDaemonSocket); }; @@ -174,10 +196,19 @@ const store = createStore({ } }; + let retryCount = 0; + const maxRetries = 5; const retryConnection = (reconnectFn) => { + if (retryCount >= maxRetries) { + console.error('❌ Max retry attempts reached for Daemon WebSocket'); + return; + } + retryCount++; + const delay = Math.min(1000 * Math.pow(2, retryCount - 1), 10000); // Exponential backoff, max 10s + console.log(`🔄 Retrying Daemon WebSocket connection in ${delay}ms (attempt ${retryCount}/${maxRetries})`); setTimeout(() => { reconnectFn(); - }, 1000); + }, delay); }; connectDaemonSocket(); }