4

我想定期尝试打开 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 响应,即使是页面刷新也无法修复它。只有进入一个全新的域然后再返回它似乎会重置。

4

1 回答 1

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);
    };
}
于 2012-08-12T10:25:48.723 回答