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



是否有可能取消WebSocket连接,而试图建立连接到服务器?

假设用户通知它是一个拼写错误的主机,并希望在onerror引发(如

)之前取消建立连接的请求

failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

我尝试调用close,但这并没有取消请求。我甚至在控制台得到警告:

failed: WebSocket在连接建立之前被关闭。

不幸的是,使用close()是无法实现的,而且似乎根本不可能。

另外,与XMLHttpRequest不同,WebSocket没有abort方法来实现这一点。

WebSocket规范没有提到任何方法来做这件事,并且将对象设置为null并不能做到这一点。

下面的示例通过将WebSocket对象设置为null来说明这一点,但仍然获得连接错误消息。

var ws = new WebSocket('ws://unknownhost.local');
ws.onopen = function() {
  console.log('ohai');
};
ws = null;
console.log(ws);
// > null
// > VM2346:35 WebSocket connection to 'ws://unknownhost.local/' failed: Error in connection establishment: net::ERR_NAME_NOT_RESOLVED

自从这个问题的前两个答案被发布以来,close()的行为似乎已经改变了。

引用mozilla API文档:

WebSocket.close()方法关闭WebSocket连接或连接尝试(如果有)。如果连接已经关闭,这个方法不做任何事情。

因此你可以这样做:

var ws = new WebSocket('ws://unknownhost.local');
setTimeout(() => {
  if (ws.readyState == WebSocket.CONNECTING) {
    ws.close();
    console.log("Connection cancelled.");
  }
}, 1000);

如果readyState没有切换到OPEN,将取消连接尝试。

我试了一下,它似乎有效(在Firefox上测试)。

close()方法只终止已建立的连接。对于你的情况,你可以将你的websocket句柄赋值为null,在你想停止它的地方。

webSocketHanle = null;

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

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

相关内容

  • 没有找到相关文章

最新更新