Verbesserung: Implementierung eines Protokoll-Fallbacks für die Daemon WebSocket-Verbindung
Änderungen: - Der Verbindungsaufbau des Daemon WebSockets wurde angepasst, um zuerst mit einem spezifischen Subprotokoll zu versuchen und bei Misserfolg auf eine Verbindung ohne Subprotokoll zurückzugreifen. - Zusätzliche Protokollausgaben wurden hinzugefügt, um den Verbindungsstatus und Fehlerdetails besser nachzuvollziehen. Diese Anpassungen erhöhen die Robustheit der WebSocket-Verbindung und verbessern die Fehlerdiagnose.
This commit is contained in:
@@ -131,70 +131,105 @@ const store = createStore({
|
|||||||
console.log('🔌 Initializing Daemon WebSocket connection to:', daemonUrl);
|
console.log('🔌 Initializing Daemon WebSocket connection to:', daemonUrl);
|
||||||
|
|
||||||
const connectDaemonSocket = () => {
|
const connectDaemonSocket = () => {
|
||||||
try {
|
// Protokoll-Fallback: zuerst mit Subprotokoll, dann ohne
|
||||||
const daemonSocket = new WebSocket(daemonUrl, 'yourpart-protocol');
|
const protocols = ['yourpart-protocol', undefined];
|
||||||
console.log('🔌 Protocol: yourpart-protocol');
|
let attemptIndex = 0;
|
||||||
|
|
||||||
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',
|
|
||||||
data: { userId: state.user.id }
|
|
||||||
});
|
|
||||||
daemonSocket.send(payload);
|
|
||||||
};
|
|
||||||
|
|
||||||
daemonSocket.onclose = (event) => {
|
const tryConnectWithProtocol = () => {
|
||||||
console.warn('❌ Daemon WebSocket disconnected:', event.reason);
|
const currentProtocol = protocols[attemptIndex];
|
||||||
console.warn('❌ Close details:', {
|
try {
|
||||||
code: event.code,
|
const daemonSocket = currentProtocol
|
||||||
reason: event.reason,
|
? new WebSocket(daemonUrl, currentProtocol)
|
||||||
wasClean: event.wasClean,
|
: new WebSocket(daemonUrl);
|
||||||
readyState: daemonSocket.readyState
|
console.log('🔌 Protocol:', currentProtocol ?? 'none (fallback)');
|
||||||
});
|
|
||||||
retryConnection(connectDaemonSocket);
|
|
||||||
};
|
|
||||||
|
|
||||||
daemonSocket.onerror = (error) => {
|
let opened = false;
|
||||||
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
|
|
||||||
});
|
|
||||||
console.error('❌ Browser info:', {
|
|
||||||
userAgent: navigator.userAgent,
|
|
||||||
location: window.location.href,
|
|
||||||
isSecure: window.location.protocol === 'https:'
|
|
||||||
});
|
|
||||||
retryConnection(connectDaemonSocket);
|
|
||||||
};
|
|
||||||
|
|
||||||
daemonSocket.addEventListener('message', (event) => {
|
daemonSocket.onopen = () => {
|
||||||
const message = event.data;
|
opened = true;
|
||||||
if (message === "ping") {
|
console.log('✅ Daemon WebSocket connected successfully');
|
||||||
daemonSocket.send("pong");
|
retryCount = 0; // Reset retry counter on successful connection
|
||||||
} else {
|
const payload = JSON.stringify({
|
||||||
try {
|
user_id: state.user.id,
|
||||||
const data = JSON.parse(message);
|
event: 'setUserId',
|
||||||
// Handle daemon messages here
|
data: { userId: state.user.id }
|
||||||
console.log('📨 Daemon message received:', data);
|
});
|
||||||
} catch (error) {
|
daemonSocket.send(payload);
|
||||||
console.error("Error parsing daemon message:", error);
|
};
|
||||||
|
|
||||||
|
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
|
||||||
|
});
|
||||||
|
// Falls Verbindungsaufbau nicht offen war und es noch einen Fallback gibt → nächsten Versuch ohne Subprotokoll
|
||||||
|
if (!opened && attemptIndex < protocols.length - 1) {
|
||||||
|
attemptIndex += 1;
|
||||||
|
console.warn('🔄 Fallback: versuche erneut ohne Subprotokoll...');
|
||||||
|
tryConnectWithProtocol();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
retryConnection(connectDaemonSocket);
|
||||||
});
|
};
|
||||||
|
|
||||||
commit('setDaemonSocket', daemonSocket);
|
daemonSocket.onerror = (error) => {
|
||||||
} catch (error) {
|
console.error('❌ Daemon WebSocket error:', error);
|
||||||
console.error('❌ Failed to create Daemon WebSocket:', error);
|
console.error('❌ Error details:', {
|
||||||
console.error('❌ URL attempted:', import.meta.env.VITE_DAEMON_SOCKET);
|
type: error.type,
|
||||||
retryConnection(connectDaemonSocket);
|
target: error.target,
|
||||||
}
|
readyState: daemonSocket.readyState,
|
||||||
|
url: daemonSocket.url,
|
||||||
|
protocol: daemonSocket.protocol
|
||||||
|
});
|
||||||
|
console.error('❌ Browser info:', {
|
||||||
|
userAgent: navigator.userAgent,
|
||||||
|
location: window.location.href,
|
||||||
|
isSecure: window.location.protocol === 'https:'
|
||||||
|
});
|
||||||
|
// Bei Fehler vor Open: Fallback versuchen
|
||||||
|
if (!opened && attemptIndex < protocols.length - 1) {
|
||||||
|
attemptIndex += 1;
|
||||||
|
console.warn('🔄 Fallback: versuche erneut ohne Subprotokoll (onerror)...');
|
||||||
|
tryConnectWithProtocol();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
retryConnection(connectDaemonSocket);
|
||||||
|
};
|
||||||
|
|
||||||
|
daemonSocket.addEventListener('message', (event) => {
|
||||||
|
const message = event.data;
|
||||||
|
if (message === "ping") {
|
||||||
|
daemonSocket.send("pong");
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
const data = JSON.parse(message);
|
||||||
|
// Handle daemon messages here
|
||||||
|
console.log('📨 Daemon message received:', data);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error parsing daemon message:", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
commit('setDaemonSocket', daemonSocket);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('❌ Failed to create Daemon WebSocket:', error);
|
||||||
|
console.error('❌ URL attempted:', import.meta.env.VITE_DAEMON_SOCKET);
|
||||||
|
// Beim Konstruktionsfehler ebenfalls Fallback versuchen
|
||||||
|
if (attemptIndex < protocols.length - 1) {
|
||||||
|
attemptIndex += 1;
|
||||||
|
console.warn('🔄 Fallback: Konstruktion ohne Subprotokoll...');
|
||||||
|
tryConnectWithProtocol();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
retryConnection(connectDaemonSocket);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
tryConnectWithProtocol();
|
||||||
};
|
};
|
||||||
|
|
||||||
let retryCount = 0;
|
let retryCount = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user