【问题标题】:websocket connections not closingwebsocket连接未关闭
【发布时间】:2012-08-08 20:14:22
【问题描述】:

我想定期尝试打开一个 websocket 连接,直到它成功。所以我每 5 秒尝试一次,它最初似乎可以工作大约一分钟左右。即在禁用服务器的情况下,尝试连接,然后立即关闭,将 readyState 设置为 3,然后 5 秒后,再次尝试,另一个相同的响应。但是一两分钟后,它不再关闭连接,它只是挂在连接状态(readyState==0)。

function wsConnect()
  {
  console.log("trying to connect...");
  var socket = new WebSocket("wss://blahblah.com");
  socket.onopen=function(){console.log("open");};
  socket.onerror=function(){console.log("error");};
  socket.onclose=function(msg){console.log("close");};

  setTimeout(function(){console.log("RS:"+socket.readyState);socket.close();wsConnect();},5000);
  }

有趣的是,如果我随后启动服务器,它会受到数十个连接的影响,大概所有导致 readyState 0 的连接都已排队。有什么方法可以完全粉碎 kill 破坏 readystate 0 连接?无法关闭,因为它没有打开。

或者,我如何定期进行连接尝试,以便在服务器可用时进行连接,而不是在我只需要一个连接时用大量连接轰炸服务器?

浏览器:铬

一旦它以 readystate 0 开始响应,即使页面刷新也无法修复它。只有进入一个全新的域然后再返回它似乎会重置。

【问题讨论】:

  • 欢迎来到堆栈溢出!你用的是什么浏览器?
  • 对不起,应该说,浏览器是 chrome。 Firefox 也表现出类似的行为。考虑到这不是一件非常不寻常的事情,我无法相信这给我带来了多大的麻烦。我只希望浏览器继续尝试,直到服务器再次可用。我是唯一有这个问题的人吗?
  • 也许在crbug.com 上打开一个错误报告会有所帮助

标签: websocket connection


【解决方案1】:

我相信你不应该尝试另一个连接,直到第一个连接关闭,然后在 onclose 事件中执行重新连接。这样,除非第一个连接失败,否则您不会创建另一个连接。

function wsConnect()
{
    console.log("trying to connect...");
    var socket = new WebSocket("wss://blahblah.com");
    socket.onopen = function() { console.log("open"); };
    socket.onerror = function() { console.log("error"); };
    socket.onclose = function(msg) {
        console.log("close");
        setTimeout(wsConnect, 5000);
    };
}

【讨论】:

  • 是的,第一件事就是尝试,但问题是,在一两分钟后,onclose 不再被调用,因为它似乎卡在连接中(就绪状态 0)
猜你喜欢
  • 1970-01-01
  • 2012-07-30
  • 2019-10-22
  • 2012-02-21
  • 2021-02-20
  • 2016-05-15
  • 2023-03-03
  • 1970-01-01
  • 2016-12-08
相关资源
最近更新 更多