【问题标题】:NodeJS Einaros WS Connection TimeoutNodeJS Einaros WS 连接超时
【发布时间】:2014-10-10 16:56:14
【问题描述】:

我在一台计算机 (server) 上使用带有 Node JSEinaros WS 模块,当我使用另一台 (client) 计算机连接时它工作正常。

如果我插入网线,ws.on('close', function()... 不会触发,我正在寻求建议:

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

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

【问题讨论】:

  • Einaros WS 模块不是为了促进任何功能而构建的,您应该自己实现它。有关您的其他问题,请参阅 my answer

标签: node.js


【解决方案1】:

Einaros WS 确实能够发送大多数浏览器和套接字框架都可以理解的 Ping 和 Pong 帧。我已经在 iOS 上使用 Socket Rocket 进行了测试,它在理解 Einaros 的 Ping 帧时没有问题。您确实必须想出应用程序特定的逻辑来 ping 的频率,以及您可以容忍多少错过的 pong。 Einaros WS 具有 ping() 和 pong() 函数来发送 ping 或 pong。您收听“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。

【讨论】:

猜你喜欢
  • 2014-08-22
  • 2017-10-28
  • 2012-03-12
  • 2021-01-12
  • 1970-01-01
  • 2015-09-07
  • 2017-12-29
  • 1970-01-01
  • 2021-09-05
相关资源
最近更新 更多