NodeJS Einaros WS连接超时

时间:2014-08-17 18:07:18

标签: node.js

我在一台计算机(server)上使用 Einaros WS 模块与 Node JS ,当我使用另一台(client)计算机连接时,它可以正常工作。

如果我插上网线,ws.on('close', function()...没有解雇,我正在寻求建议:

  • 我必须实现自己的ping / pong或

  • 有一个内置功能可以自动处理。

1 个答案:

答案 0 :(得分:16)

Einaros WS确实能够发送大多数浏览器和套接字框架都能理解的Ping和Pong帧。我已经在iOS上测试了Socket Rocket,它对于Einaros的Ping帧没有任何问题。你必须提出应用程序特定的逻辑,用于ping的频率,以及你能容忍多少错过的pong。 Einaros WS有ping()和pong()函数来发送ping或pongs。您收听“pong”事件以了解您何时收到客户的回复。以下是我在代码中执行此操作的方法:

wss.on("connection", function(ws) {
    console.log("websocket connection open");
    ws.pingssent = 0;
    var interval = setInterval(function() {
        if (ws.pingssent >= 2) {// how many missed pings you will tolerate before assuming connection broken.
            ws.close();
        } else {
            ws.ping();
            ws.pingssent++;
        }
    }, 75*1000);// 75 seconds between pings
    ws.on("pong", function() { // we received a pong from the client.
        ws.pingssent = 0; // reset ping counter.
    });
});

在Socket Rocket的情况下,客户端不需要代码。因此,兼容的浏览器和客户端将自动响应Pongs。