WebSocket mit Stomp kehrt auf v1.1 zurück, obwohl 1.2 im Header definiert ist
Posted: 12 Feb 2025, 00:24
Ich arbeite mit WebSockets und versuche, eine WebSocket -Verbindung von einer Website zu duplizieren. Es wirft einen Fehler aus und stoppt. Mein Code verbindet sich wieder und es funktioniert wieder. Die Verbindung der ursprünglichen Site endet nie stundenlang, Tage, ... Mein Start nach 10-15 Minuten dann muss ich wieder verbinden. vom Server akzeptiert, aber mein Code wird vom Server auf 1.1 gezwungen. < /p>
Ideen? Wenn Sie die JS -Dateien inspizieren möchten, die die ursprüngliche Site zum Erstellen und Verwalten der WSS -Verbindung verwendet, lassen Sie es mich wissen. < /P>
Ideen? Wenn Sie die JS -Dateien inspizieren möchten, die die ursprüngliche Site zum Erstellen und Verwalten der WSS -Verbindung verwendet, lassen Sie es mich wissen. < /P>
Code: Select all
document.addEventListener('DOMContentLoaded', () => {
const baseUrl = 'https://pe-dingdong.nio.com/pe/dingdong/msg';
let sock = null;
let stompClient = null;
let reconnectTimeout = null;
let connectionAttempts = 0;
const MAX_RECONNECT_ATTEMPTS = 10; // Prevent infinite reconnect loops
function connectWebSocket() {
if (sock && sock.readyState !== SockJS.CLOSED) {
console.log("WebSocket already connected or connecting...");
return;
}
if (connectionAttempts >= MAX_RECONNECT_ATTEMPTS) {
console.error("Max reconnect attempts reached. Stopping further reconnects.");
return;
}
console.log("Connecting to WebSocket...");
connectionAttempts++;
sock = new SockJS(baseUrl);
stompClient = Stomp.over(sock);
// Disable debug logging
stompClient.debug = console.log;
const headers = {
'accept-version': '1.2', // Explicitly request STOMP version 1.2
'heart-beat': '5000,5000' // Heartbeat every 5 seconds
};
stompClient.heartbeat.outgoing = 5000;
stompClient.heartbeat.incoming = 5000;
// Override default STOMP connect method to ensure headers are respected
stompClient._connectHeaders = headers;
stompClient.connect(headers, onConnect, onError);
sock.onclose = function() {
console.warn('WebSocket closed at', new Date().toISOString());
};
}
function onConnect(frame) {
console.log('Connected to WebSocket with STOMP version:', frame.headers.version);
if (frame.headers.version !== "1.2") {
console.warn("Warning: Server connected with STOMP version", frame.headers.version, "instead of 1.2");
}
// Reset connection attempts on successful connection
connectionAttempts = 0;
// Subscribe
stompClient.subscribe('/room/h5/charge-map', onMessageReceived);
// Clear previous reconnect attempts
if (reconnectTimeout) {
clearTimeout(reconnectTimeout);
reconnectTimeout = null;
}
}
function onError(error) {
console.error('WebSocket error:', error);
if (error.command === "ERROR") {
console.warn("Received STOMP ERROR frame:", error.body || "No details provided.");
return;
}
if (stompClient) {
stompClient.disconnect(() => {
console.log('Disconnected. Reconnecting in 5 seconds...');
reconnectTimeout = setTimeout(connectWebSocket, 5000);
});
} else {
reconnectTimeout = setTimeout(connectWebSocket, 5000);
}
}
function onMessageReceived(payload) {
try {
//const message = JSON.parse(payload.body);
//console.log(message);
} catch (err) {
console.error("Error processing WebSocket message:", err);
}
}
connectWebSocket();
});