2012-08-12 185 views
3

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

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连接?无法关闭它,因为它没有打开。

或者,我该如何定期进行连接尝试,以便在服务器可用时连接,但在所有需要的情况下都不会用大量连接轰炸服务器?

浏览器:铬

一旦它开始与readyState的应答0,甚至刷新页面不会修复它。只有进入一个全新的领域,然后回去看似重置。

+0

欢迎使用堆栈溢出!你使用的是什么浏览器? – starbeamrainbowlabs 2012-08-12 09:12:09

+0

对不起,应该说,浏览器是铬。 Firefox也表现出类似的行为。我无法相信这给了我多少麻烦,因为这不是一件非常不寻常的事情。我只想让浏览器继续尝试,直到服务器再次可用。我是唯一有这个问题的人吗? – poby 2012-08-12 10:04:01

+0

也许在http://crbug.com打开一个错误报告将帮助 – starbeamrainbowlabs 2012-08-14 17:11:29

回答

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(wsConnect, 5000); 
    }; 
} 
+0

Yup第一次尝试,但问题是,一分钟或2分钟后,onclose不会被称为没有更多的因为它似乎只是在连接(readystate 0) – poby 2012-08-12 11:29:30