WebSocket с использованием Stomp возвращается к V1.1, хотя 1.2 определяется в заголовкеHtml

Программисты Html
Ответить
Anonymous
 WebSocket с использованием Stomp возвращается к V1.1, хотя 1.2 определяется в заголовке

Сообщение Anonymous »

Я работаю с WebSockets и пытаюсь дублировать соединение WebSocket с веб -сайта. он бросает ошибку и останавливается. Мой код воссоединяется, и он снова работает. Подключение оригинального сайта никогда не заканчивается часами, днями, ... начало отключения шахты через 10-15 минут, затем мне придется воссоединиться. Принят сервером, но мой код вынужден 1.1. Если вы хотите проверить файлы JS, которые оригинальный сайт использует для установления и поддержания соединения WSS, дайте мне знать. < /P>







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






Подробнее здесь: https://stackoverflow.com/questions/794 ... -in-header
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»