WebSocket事件不会偶尔触发

时间:2014-12-26 02:12:09

标签: javascript jquery websocket

我搜索了一会儿,但找不到适合我特定问题的解决方案。

我有"默认"我的JavaScript文件中的WebSocket实现。它有效,但每次都不起作用。有时(可能是第一次,但也可能是第101次)事件不会发生。至少应该使用wasClean == false?

进行onclose-event fire

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

编辑:忘记了什么。只有在我提供错误的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;
    };
});

1 个答案:

答案 0 :(得分:1)

自己解决了。

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

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

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