客户端等待websocket的最佳方式是什么?

时间:2013-12-04 22:40:26

标签: javascript websocket

我想连接到服务器,然后在连接打开后立即执行一些操作。但是,如果连接停止,我想陷阱,而不是做这些东西,也许取消等待连接。

function doStuff () {
    var connection = new WebSocket('wss://someURL');

    //do some stuff here as soon as socket open but trap for stall
}

我正在寻找一些功能,例如

connection.addEventListener('timeout',...);

因为在配置我的WS服务器不响应(模拟太慢的服务器)时,Chrome的网络检查员会永久地将连接显示为“待定”。由于缺乏该功能,我的第一个传递是:

function doStuff () {
    var connection = new WebSocket('wss://someURL');
    connection.addEventListener('open', onOpen, false);

    var socketTimer = setTimeout(onNotResponding, 10000);

    function onOpen () {
        clearTimeout(socketTimer);
        //do my stuff here.
    }

    function onNotResponding () { 
        //the server is not responding, how do I "cancel" the connection request here? 
    }
}

3 个答案:

答案 0 :(得分:3)

(这是一个问题的答案:等待websocket变得可用的最佳方式,我认为这是本帖的目的。无论如何,我在这里留下我的答案,也许是其他读者会发现它很有用。)

以下是我解决它的方法:

var socket;

var socketOnMessage = function(msg) {
    console.log("received " + msg.data);
};

var socketOnOpen = function(msg) {
    console.log("websocket opened");
};

var socketOnClose = function(msg) {
    console.log('websocket disconnected - waiting for connection');
    websocketWaiter();
};

function websocketWaiter(){
    setTimeout(function(){
        socket = new WebSocket(websocketUrl);
        socket.onopen = socketOnOpen;
        socket.onclose = socketOnClose;
        socket.onmessage = socketOnMessage;
    }, 1000);
};

websocketWaiter();

在onClose事件处理程序中,再次调用websocketWaiter。

在websocketWaiter中,您必须重新初始化事件处理程序,因为您创建了一个新对象。

答案 1 :(得分:0)

快速谷歌搜索显示了这一点 https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#close%28%29

connection.close();

答案 2 :(得分:-1)

请注意,您在Chrome开发者工具中看到的待处理连接是初始http连接,然后保持打开以允许Web套接字进行双向通信。 你不会看到真正的websocket流量。

为此,您可以在此处安装免费的WireShark网络流量嗅探器:

How to debug websockets with wireshark

您还可以使用显示过滤器过滤以仅显示WebSocket数据包:(websocket)