Fix: Verbesserung der Daemon WebSocket-Verbindung und Fehlerbehandlung
Ä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.
This commit is contained in:
@@ -130,11 +130,20 @@ const store = createStore({
|
|||||||
}
|
}
|
||||||
const daemonUrl = import.meta.env.VITE_DAEMON_SOCKET || 'wss://www.your-part.de:4551';
|
const daemonUrl = import.meta.env.VITE_DAEMON_SOCKET || 'wss://www.your-part.de:4551';
|
||||||
console.log('🔌 Initializing Daemon WebSocket connection to:', daemonUrl);
|
console.log('🔌 Initializing Daemon WebSocket connection to:', daemonUrl);
|
||||||
|
console.log('🔌 Protocol:', 'yourpart-protocol');
|
||||||
try {
|
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 = () => {
|
daemonSocket.onopen = () => {
|
||||||
console.log('✅ Daemon WebSocket connected successfully');
|
console.log('✅ Daemon WebSocket connected successfully');
|
||||||
|
retryCount = 0; // Reset retry counter on successful connection
|
||||||
const payload = JSON.stringify({
|
const payload = JSON.stringify({
|
||||||
user_id: state.user.id,
|
user_id: state.user.id,
|
||||||
event: 'setUserId',
|
event: 'setUserId',
|
||||||
@@ -145,11 +154,24 @@ const store = createStore({
|
|||||||
|
|
||||||
daemonSocket.onclose = (event) => {
|
daemonSocket.onclose = (event) => {
|
||||||
console.warn('❌ Daemon WebSocket disconnected:', event.reason);
|
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);
|
retryConnection(connectDaemonSocket);
|
||||||
};
|
};
|
||||||
|
|
||||||
daemonSocket.onerror = (error) => {
|
daemonSocket.onerror = (error) => {
|
||||||
console.error('❌ Daemon WebSocket error:', 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);
|
retryConnection(connectDaemonSocket);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -174,10 +196,19 @@ const store = createStore({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let retryCount = 0;
|
||||||
|
const maxRetries = 5;
|
||||||
const retryConnection = (reconnectFn) => {
|
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(() => {
|
setTimeout(() => {
|
||||||
reconnectFn();
|
reconnectFn();
|
||||||
}, 1000);
|
}, delay);
|
||||||
};
|
};
|
||||||
connectDaemonSocket();
|
connectDaemonSocket();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user