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)

未捕获的 InvalidStateError:无法在“WebSocket”上执行“发送”:

Apache:代理 websocket wss 到 ws

记一次websocket连接不上问题?

如何将 WS-Addressing 字段添加到 SOAP 消息