ws 如何捕获:到 'ws:// 的 WebSocket 连接失败:连接建立错误:net::ERR_CONNECTION_REFUSED
Posted
技术标签:
【中文标题】ws 如何捕获:到 \'ws:// 的 WebSocket 连接失败:连接建立错误:net::ERR_CONNECTION_REFUSED【英文标题】:ws how to catch : WebSocket connection to 'ws:// failed: Error in connection establishment: net::ERR_CONNECTION_REFUSEDws 如何捕获:到 'ws:// 的 WebSocket 连接失败:连接建立错误:net::ERR_CONNECTION_REFUSED 【发布时间】:2016-07-30 03:14:47 【问题描述】:我有简单的 web sockets html5,当服务器启动时,一切正常 问题是当我关闭服务器时(用于测试) 我得到了:
WebSocket connection to 'ws://127.0.0.1:7777/api' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
如果出现此错误,我无法捕捉到它永远不会跳转到 onerror 或 onclose
init: function ()
this.m_wsiSendBinary = new WebSocket("ws://127.0.0.1:7681/wsapi");
this.m_wsiSendBinary.onopen = function(evt)
cc.log("Send Binary WS was opened.");
;
this.m_wsiSendBinary.onmessage = (function(evt)
this.handleServerResponse(yStr);
this.m_wsiSendBinary.onerror = function(evt)
;
this.m_wsiSendBinary.onclose = function(evt)
cc.log("m_wsiSendBinary websocket instance closed.");
self.m_wsiSendBinary = null;
;
).bind(this);
【问题讨论】:
【参考方案1】:我没有完整的答案,但是我处理了类似的问题并且有一个部分且不那么优雅的解决方案(但可能会帮助某人)。遗憾的是没有消除错误信息。
两个业务需求:
BR1 - 当服务器不可用时处理初始化中的状态。 BR2 - 服务器停止时处理状态。BR1 的解决方案
var global_connection_openned=null;//Here you have the result
init: function ()
global_connection_openned=false;
this.m_wsiSendBinary = new WebSocket("ws://127.0.0.1:7681/wsapi");
this.m_wsiSendBinary.onopen = function(evt)
global_connection_openned=true;
;
BR2 的解决方案(假设为 BR1)
//somewhere in your project called by setInterval(..) which will detect the connection is lost (and tries to reestablish/reopen the connetion.
if (this.m_wsiSendBinary==null || this.m_wsiSendBinary.readyState==3)
this.init();
if (!global_connection_openned)
this.m_wsiSendBinary=null;
无论如何,我真的很好奇这个用例是否有可靠且适当的解决方案。
【讨论】:
为什么需要全局变量?检查 WS 状态还不够?以上是关于ws 如何捕获:到 'ws:// 的 WebSocket 连接失败:连接建立错误:net::ERR_CONNECTION_REFUSED的主要内容,如果未能解决你的问题,请参考以下文章
WebSocket 连接到“ws://chattestarpit.herokuapp.com/”失败:WebSocket 握手期间出错:意外响应代码:503
捕获窗口的屏幕截图,不包括某些 HWND 的样式 (WS_SYSMENU)