Способ предотвращения появления ошибок WebSocket в консоли браузера - PullRequest
1 голос
/ 12 октября 2019

Таким образом, проблема в том, что когда я пытаюсь инициировать новый WebSocket на удаленном хосте, иногда консоль браузера печатает красное сообщение об ошибке и жалуется на отказ в соединении, вот сообщение:

Error in connection establishment: net::ERR_CONNECTION_REFUSED

Хорошо иметь ошибку, так как удаленный хост иногда может не отвечать, но тот факт, что я не могу обработать это сообщение об ошибке, очень раздражает.

Есть лиспособ обработать это сообщение об ошибке или проверить, принимает ли удаленный хост соединение WebSocket перед его инициализацией в моем коде JavaScript ??

1 Ответ

2 голосов
/ 12 октября 2019

На ум приходит несколько вариантов:

  1. Добавить WebSocket.onerror Обработчик ошибок

    myWebSocket.onerror = myEventHandler;
    
  2. Wrapваше «соединение» в блоке try / catch

    try {
       const connection = new WebSocket(myUrl);
       ...
    }
    catch(error) {
       console.error(error);
    }
    
  3. Структурируйте ваш код так, чтобы ваш ввод / вывод был управляемым событиями:

    https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#Examples

    // Create WebSocket connection.
    const socket = new WebSocket('ws://localhost:8080');

    // Connection opened
    socket.addEventListener('open', function (event) {
        socket.send('Hello Server!');
    });

    // Listen for messages
    socket.addEventListener('message', function (event) {
       console.log('Message from server ', event.data);
    });

    // Handle errors
    socket.addEventListener('error', function (event) {
       console.log('WebSocket error observed:', event);
    });

ADDENDUM:

  • Вышеуказанные методы позволяют полностью обработать исключение websockets.

  • Независимо от того, обрабатывается ли исключение или нет, отладчик Chrome сообщит вам, возникло ли исключение. Это хорошая вещь. Это называется «Исключение первого шанса»:

    https://docs.microsoft.com/en-us/security-risk-detection/concepts/first-chance-exception

    .. это известно как исключение «первого шанса» - отладчику дается первый шанс осмотретьисключение до того, как приложение его обработало (или нет).

    В отладчике Microsoft Visual Studio есть небольшой флажок, который вы можете использовать, чтобы «заткнуть рот» исключения первого шанса. Я не знаю ни одного подобного «флажка» в отладчике Chrome.

  • ВОЗМОЖНЫЕ ПРЕДЛОЖЕНИЯ:

    • Отладчик Chrome имеет «фильтр». ПРИМЕР РЕГИОНА ФИЛЬТРА: ^((?!ERR_CONNECTION_REFUSED).)*$

    • Эта ссылка предполагает, что вы можете использовать фильтр для «Скрыть сетевые сообщения» (я сам не пробовал). См. Также эту ссылку .

...