抑制“与 'xyz' 的 WebSocket 连接失败”
Posted
技术标签:
【中文标题】抑制“与 \'xyz\' 的 WebSocket 连接失败”【英文标题】:Suppress "WebSocket connection to 'xyz' failed"抑制“与 'xyz' 的 WebSocket 连接失败” 【发布时间】:2015-11-05 20:02:08 【问题描述】:我编写了一个使用网络套接字的网络应用程序。这个想法是我的应用程序在启动时尝试自动连接到最近连接到的主机。如果无法与其中任何一个建立连接,则会将用户引导至连接部分并要求他们手动建立连接。
所有这些都有效。总之,我按顺序尝试每个已知主机,如果 200 毫秒后它还没有连接(`readyState!= 1),它会尝试下一个。所有这些主机都应该在 LAN 上,因此 200 毫秒的工作非常可靠。如果列表中的最后一个也失败了,那么网络会打开一个模式,指导用户手动输入主机。
问题是,通过尝试自动连接,我必须为我尝试的主机创建 websocket,它会向控制台输出如下错误消息:
到“ws://lightmate:8080/”的 WebSocket 连接失败:错误 连接建立:net::ERR_NAME_NOT_RESOLVED
到 'ws://localhost:8080/' 的 WebSocket 连接失败:错误 连接建立:net::ERR_CONNECTION_REFUSED
虽然无论如何都不是致命的缺陷,但它很难看并且妨碍了我的调试。
我尝试通过使用 try/catch 块包围对 new WebSocket(address)
的调用来删除它,但错误仍然存在,我还尝试设置 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);
;
,
双重免责声明: 这个问题类似于this *** question,但是这个问题已经过时了一年,并且共识是“你不能”。我希望从那以后情况有所改变。
【问题讨论】:
您是否覆盖了 onerror 回调?可以发一下代码吗? 我已经发布了代码 如果你的意思是WebSocket
是一个原生支持的类,那么它在所有浏览器中的支持显然是不同的。 API 不提供这样的配置。绝对不能捕获异常,因为操作本身是异步的。您可以做的是切换到任何 js 库(例如:socket.io),其中可以控制详细程度和超时。但我认为舒适的调试不值得付出这种努力。也许您可能会找到另一个理由在所有客户端上使用相同的实现
在尝试了很多想法之后,我开始认为避免消息的唯一方法是禁用日志记录(我不知道如何)或每次使用 @ 清除日志987654326@ 回调 - 这是一个可怕的想法......比我想到的另一个想法......为什么你不能像大多数应用一样使用相同的地址并使用负载均衡器?
该策略的问题在于我没有尝试访问互联网。我正在尝试访问应配置特殊“lightmate”主机的 LAN,如果尝试“localhost”不起作用,则返回手动。
【参考方案1】:
无法捕获该错误消息,该错误消息与创建 WebSocket
对象的代码异步发生。
更多详情:javascript doesn't catch error in WebSocket instantiation
【讨论】:
以上是关于抑制“与 'xyz' 的 WebSocket 连接失败”的主要内容,如果未能解决你的问题,请参考以下文章