Подавить "Сбой подключения WebSocket к" xyz ""

Я написал веб-приложение, которое использует веб-сокеты. Идея состоит в том, что мое приложение пытается автоматически подключиться к недавно подключенным к хостам при запуске. Если он не может установить соединение ни с одним из них, он направляет пользователя к части соединения и просит их установить соединение вручную.

Все это работает. Таким образом, я пробую каждый известный хост по порядку, и если через 200 мс он не подключился (`readyState!= 1), он пробует следующий. Все эти хосты должны быть в локальной сети, поэтому 200 мс работают довольно надежно. Если последний из списка тоже не работает, то в Интернете открывается модальное окно, в котором пользователь может вручную ввести хост.

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

Сбой соединения WebSocket с 'ws://lightmate:8080/': Ошибка при установлении соединения: net::ERR_NAME_NOT_RESOLVED

Сбой соединения WebSocket с 'ws://localhost:8080/': Ошибка при установлении соединения: net::ERR_CONNECTION_REFUSED

Хотя это и не фатальный недостаток, это неприглядно и мешает моей отладке.

Я пытался удалить его, окружив звонки new WebSocket(address) с блоком try/catch, и ошибки все еще проходят, и я также попытался установить onerror обработчик, надеясь, что это подавит сообщения об ошибках. Ничего не сработало.

connect: function(){
  var fulladdr = completeServerAddress(address);
  try {
    connection = new WebSocket(fulladdr);
    connection.suppressErrorsBecauseOfAutoConnection = suppressErrorsBecauseOfAutoConnection; //Store this module-scoped variable in connection, so if the module changes suppression state, this connection won't.
  } catch (e){
    //Make sure we don't try to send anything down this dead websocket
    connection = false;
    return false;
  }
  connection.binaryType = "arraybuffer";
  connection.onerror = function(){
    if (connection !== false && !connection.suppressErrorsBecauseOfAutoConnection){
      Announce.announceMessage("Connection failed with server");
    }
    connection = false;
  };
  connection.onmessage = function(m){
    rxMessage(ConnectionProtocol.BaseMessage.parseChunk(m.data));
  };
  connection.onclose = function(){
    hooks.swing("disconnected", "", 0);
    if (connection !== false && !connection.suppressErrorsBecauseOfAutoConnection){
      Announce.announceMessage("Connection lost with server");
    }
  };
  connection.onopen = function(){
    sendMessages(ConnectionProtocol.HandshakeMessage.create(name, sources, sinks));
    while (idlingmessages.length){
      websocketConnection.send(idlingmessages.splice(0,1)[0]);
    }
    hooks.swing("connected", "", 0);
  };
},

Dupl Disclaimer: Этот вопрос похож на этот вопрос Stackru, но этот вопрос устарел на год, и согласие было "вы не можете". Я надеюсь, что все изменилось с тех пор.

1 ответ

Нет способа перехватить это сообщение об ошибке, которое происходит асинхронно с кодом, где WebSocket объект создан.

Более подробная информация здесь: Javascript не улавливает ошибку при создании экземпляра WebSocket.

Другие вопросы по тегам