javascript - WebSocket 事件不会偶尔触发

标签 javascript jquery websocket

我搜索了一段时间,但找不到针对我的特定问题的有效解决方案。

我的 JavaScript 文件中有“默认”WebSocket 实现。它有效,但并非每次都有效。有时(可能是第一次,也可能是第 101 次)事件不会触发。至少 onclose-event 不应该以 wasClean == false 触发吗?

也许有人可以帮我解决这个问题。

编辑:忘记了什么。仅当我提供错误的 IP 地址时才会发生:
ws = new WebSocket("ws://"+ ip + ":9999/");

因此不需要服务器端代码来回答这个问题。

$(document).ready(function () {
    ws = new WebSocket("ws://" + ip + ":9999/");

    ws.onopen = function(evt) {
        console.log("CONNECTED");
        doSend("getInfo");
    };

    ws.onclose = function(evt) {
        if (!evt.wasClean) {
            showError();
            return;
        }

        console.log("DISCONNECTED");
    };

    ws.onmessage = function(evt) {
        newIP = evt.data;
    };
});

最佳答案

我自己解决了。

问题是,如果给定 IP 地址后面没有设备,则无路由到主机错误的触发速度不够快。因此,我实现了一个超时,检查 100 毫秒后套接字的就绪状态是否为零(应用程序在局域网中运行,因此时间应该足够长)

function checkServer(ip, port) {
    var ws = new WebSocket("ws://" + ip + ":" + port);

    setTimeout(function() {
       if (ws.readyState == 0) {
          showError();
       }
       else {
          ws.close();
          ConnectToServer();
        }
    }, 100);
}

关于javascript - WebSocket 事件不会偶尔触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27652228/

相关文章:

javascript - 如何使用 Jquery 定位父级 sibling 的子级的单个实例?

javascript - 是否有 JavaScript/jQuery DOM 更改监听器?

c++ - Boost beast::websocket 回调函数

javascript - 如何在 React Native 中将 PCM 样本从麦克风转换为字节

javascript - SVGforeignObject文本未出现在移动浏览器中

javascript - 将 Javascript 插入到 ASP.NET 的内容页面中而不进行编译

html - 很酷的 HTML5/CSS3 表格?

c++ - QT中两个窗口共享websocket连接

javascript - 吞下消息 : Error: Uncaught (in promise): [object Undefined]

javascript - 如何通过javascript或jquery从句子中提取括号内外的文本