websocket连接没有关闭

时间:2012-08-12 06:09:23

标签: websocket connection

我想定期尝试打开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的所有连接都排队了。有没有办法完全粉碎杀死销毁一个readystate 0连接?无法关闭它,因为它没有打开。

或者,我如何定期进行连接尝试,以便在服务器可用时连接,但是当我想要的只有一个连接时没有用大量连接轰炸服务器?

浏览器:chrome

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

1 个答案:

答案 0 :(得分:0)

我相信你不应该尝试另一个连接,直到第一个关闭,然后在 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);
    };
}