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();
});