node.js - NodeJS Einaros WS 连接超时

标签 node.js

我在一台计算机(服务器)上使用Einaros WS模块和Node JS,当我使用另一台连接时它工作正常>(客户端) 计算机。

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

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

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

最佳答案

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。

关于node.js - NodeJS Einaros WS 连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25352111/

相关文章:

javascript - Webpack/如何在开发模式下不捆绑 JS 文件?

javascript - 在 Meteor 中批量创建

node.js - 安全互连 node.js 应用程序/ worker /集群的基础知识是什么?

node.js - 在 Visual Studio Code 中运行 Node http 服务器的步骤

javascript - Laravel-echo-server 无法使用 https 协议(protocol)启动生产

node.js - 切换到输入nodejs的路径

node.js - 带有实验模块的 Node 模块路径别名

node.js - 使用 Yeoman 设置 AngularJS 项目后出现 "npm install"问题

javascript - 谷歌云消息 (fake_message_id)

javascript - nodejs如何在没有多线程的情况下允许更好的http请求性能?