尝试连接时取消WebSocket连接(JavaScript)

时间:2016-10-12 07:30:15

标签: javascript websocket

尝试与服务器建立连接时是否可以取消WebSocket连接?

让我们说用户通知它是一个拼写错误的主机,并希望在onerror出现之前取消建立连接的请求,如

  

失败:连接建立错误:net :: ERR_CONNECTION_REFUSED

我试图调用close,但这并不取消请求。我甚至在控制台发出警告:

  

失败:在建立连接之前WebSocket已关闭。

3 个答案:

答案 0 :(得分:2)

不幸的是,使用var description = [ "http://placehold.it/300x300", "http://placehold.it/200x200", "http://placehold.it/100x100" ]; var size = description.length var x = Math.floor(size*Math.random()) $('.item img').each(function() { if($("img").hasClass("people")) { $(this).attr("src",description[x]); } }); 无法实现这一点,而且似乎根本无法实现。

此外,与XMLHttpRequest不同,WebSocket没有close()方法来实现此目的。

WebSocket specs没有提及这样做的任何方法,将对象设置为abort并不起作用。

以下示例通过将WebSocket对象设置为null来说明这一点,但仍会收到连接错误消息。

null

答案 1 :(得分:0)

close()方法仅终止已建立的连接。 对于您的情况,您可以使用将websocket句柄指定为null来停止它。

webSocketHanle = null;

通过此分配,您的回调将不会被激活。

但请注意,从服务器获取响应的过程非常快。

答案 2 :(得分:0)

自该问题的前两个答案发布以来,~matches.any(axis=1)的行为似乎已经改变。

引用mozilla API docs

WebSocket.close()方法关闭WebSocket连接或连接尝试(如果有)。如果连接已经关闭,则此方法不执行任何操作。

因此,您可以这样做:

close()

如果readyState尚未切换到var ws = new WebSocket('ws://unknownhost.local'); setTimeout(() => { if (ws.readyState == WebSocket.CONNECTING) { ws.close(); console.log("Connection cancelled."); } }, 1000); ,这将取消连接尝试。

我尝试了这个,它似乎可以工作(在Firefox上测试)。