Подавить "Сбой подключения 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.