WebSocket 事件不会偶尔触发



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

我的JavaScript文件中有"默认"的WebSocket实现。它有效,但并非每次都有效。有时(可能是第一次,但也可能是第 101 次)事件不会触发。至少不应该是干净的 == 假的关闭事件火灾吗?

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

编辑:忘记了什么。仅当我为以下对象提供了错误的 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地址后面没有设备,则无路由到主机错误触发的速度不够快。所以我实现了一个超时,用于检查套接字的 readyState 在 100 毫秒后是否为零(应用程序在局域网中运行,因此时间应该足够大)

function checkServer(ip, port) {
    var ws = new WebSocket("ws://" + ip + ":" + port);
    setTimeout(function() {
       if (ws.readyState == 0) {
          showError();
       }
       else {
          ws.close();
          ConnectToServer();
        }
    }, 100);
}

最新更新