Meteor WebSocket 已处于 CLOSING 或 CLOSED 状态错误

Posted

技术标签:

【中文标题】Meteor WebSocket 已处于 CLOSING 或 CLOSED 状态错误【英文标题】:Meteor WebSocket is already in CLOSING or CLOSED state error 【发布时间】:2016-10-26 10:36:04 【问题描述】:

在实现Detecting idle time in javascript elegantly 后,我在浏览器控制台中收到“WebSocket 已处于 CLOSING 或 CLOSED 状态”错误。如何解决这个问题?这是我的代码:

    var inactivityTime = function () 
        var t;
        window.onload = resetTimer;
        document.onmousemove = resetTimer;
        document.onkeypress = resetTimer;

        function detector() 
            alert("You are idle!");
        


        function resetTimer() 
            console.log("RESET!");
            clearTimeout(t);
            t = setTimeout(detector, 10000)

            // 1000 milisec = 1 sec
        
    ;

Template.myTemplate.onRendered(function()
    inactivityTime();
);

【问题讨论】:

【参考方案1】:

当 t 可能尚未初始化时,您正在调用 clearTimeout(t) - 您应该先检查一个值

【讨论】:

我用 if() 检查过,但没有帮助:if(t) clearTimeout(t); 好的,我解决了这个问题。刚刚将 set/clearTimeout 更改为 Meteor.set/clearTimeout。不过,我会接受你的回答,因为它也很有帮助。 嗯,有人欢呼太快了:(错误仍然存​​在。 一分钟成功,然后又失败了?你的代码现在是什么样子的 我的代码是一样的。如果出现警报消息(第一次超时)并单击“确定”(警报消息),我不会收到错误消息。但是,如果出现警报消息并且我等待第二次超时而不单击“确定”,则会收到此错误。如果我可以禁用第二个超时,只要我没有单击确定,它可能会解决这个问题。但是,我不知道该怎么做。

以上是关于Meteor WebSocket 已处于 CLOSING 或 CLOSED 状态错误的主要内容,如果未能解决你的问题,请参考以下文章

Meteor:WebSocket 握手期间出错:意外响应代码:400

如何确保 WebSocket 的 readyState 变为 CLOSED(3)?

The WebSocket session [0] has been closed and no method (apart from close()) may be called on a clos

使用 nginx 的 Meteor WebSocket 握手错误 400

websocket项目电子签字使用场景

刨根问底 HTTP 和 WebSocket 协议(上)