如何在NodeJS中测试socket.setKeepAlive

2024-04-23

我尝试在NodeJS中测试setKeepAlive()的功能。我在同一本地网络中的不同计算机上运行 Server.js 和 client.js。然后,我关闭了客户端计算机上的 WiFi 连接(断开互联网连接)。 15分钟后,仍然没有消息抛出。这是为什么? setKeepAlive() 不起作用吗?

下面是服务器端和客户端的代码:

客户端.js

var net = require('net');
var HOST = '192.168.0.16';
var PORT = 8333;

var client = net.connect(PORT, HOST, function connected(){
    console.log('connected');
});

client.setKeepAlive(true, 1);
client.write('hi server');

client.on('data', function(data) {
    console.log('Received' + data);
});

client.on('close', function(){
    console.error('connection closed');
)};

client.on('error', function(err){
    console.error('error', err);
});

服务器.js

var net = require('net');
var HOST = '192.168.0.16';
var PORT = 8333;

net.createServer(function(sock) {
    console.log('CONNECTED: ' + sock.remoteAddress + ':' + sock.remotePort);

    sock.on('data', function(data) {
        console.log('DATA ' + sock.remoteAddress + ': ' + data);
        sock.write('hi client');
    });

    sock.on('close', function(data) {
        console.log('CLOSED: ' +
        sock.remoteAddress + ' ' + sock.remotePort);
    });

    sock.on('error', function(error){
        console.log('error', error);
    });

}).listen(PORT, HOST);

console.log('Server listening on ' + HOST +':'+ PORT);

我会使用 setInterval(sendKeepAliceFunc, delay) 和 socket.setTimeout() 自己实现 keep_alive

keep_alive 消息之间的延迟应该足够大(~10000ms),如果延迟

我认为原来的keepalive功能并不可靠。我已成功在其他编程语言(C# 和 C)上启用它,并且我可以跟踪网络并查看 KEEP_ALIVE 数据包,但在某些情况下它不起作用(特殊网络配置,人们可能在虚拟机中运行应用程序,...)

所以我建议你自己实现它,你可以使用相同的 API 实现你自己的套接字,但也有你新的 keepalive 功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在NodeJS中测试socket.setKeepAlive 的相关文章

  • Discord.js:无效的位字段标志或数字:GUILDS

    我正在第一次尝试制作 Discord 机器人 该代码非常基本 只是一个在启动时将自己的标签记录到控制台的机器人 const Discord require discord js const TOKEN REDACTED const clie
  • 调试 SSR node.js 服务器端 VSCode

    我在尝试调试 SSR React 应用程序 服务器端 时花费了太多时间 我们正在从头开始构建一个应用程序 这是一个非常大的项目 因此调试代码非常重要 服务器的 webpack 配置如下 const path require path con
  • { [FacebookTokenError:此授权码已被使用。]

    我有一个航行应用程序 我正在尝试实现 Facebook 登录 当我单击 使用 facebook 登录 按钮时 出现此错误 error A server error occurred in a request error FacebookTo
  • 在 Android 4.2.2 和 4.3 上关闭 BluetoothSocket 时出现致命信号 11 SIGSEGV

    我的应用程序在 Android 2 3 3 到 4 1 2 下运行良好 但自从 Android 4 2 2 和 Android 4 3 以来 我有一个 fatal signal 11 SIGSEGV at 0x00 当我关闭蓝牙插座时 我查
  • Electron 应用程序可以与 java 代码集成吗?

    由于node js仍然缺乏Java中存在的重要功能 因此我想使用Java而不是node js 并使用Web语言 html js css 创建客户端 Electron 是跨平台的 java 也是跨平台的 因此似乎有一个能够两全其美的解决方案
  • 关闭/清理“混合”文件描述符/套接字

    当我使用accept 创建一个套接字并使用fdopen 从中创建一个文件时 我需要做什么来清理所有内容 我是否需要对 FILE 执行 fclose 对套接字执行 shutdown 和 close 还是只需要 shutdown 和 或 clo
  • mean.io - 错误:“请求实体太大”。如何在meanio模块之外增加bodyParser限制?

    我在mean io 应用程序中收到以下错误 Error request entity too large 为了解决这个问题 我在以下位置增加了meanio模块中的bodyParser限制 node modules meanio lib co
  • 为什么我的异步函数返回得太快? [复制]

    这个问题在这里已经有答案了 我正在尝试使用异步函数来调用另一个函数内的函数 它看起来像这样 const getConnectionsWithEmailsHash async gt const connectionsWithEmails aw
  • 使用 Mongoose 多次查询,无需嵌套

    我正在尝试使用 node js 生成一个文档 该文档需要从 mongo 数据库运行多个不相关的数据库查询 这是我当前的代码 Data find function err results if err return next err fini
  • 如何定义与 Backbone 一起使用的 jade 模板

    我需要使用模板来渲染每个 ItemView var ItemView Backbone View extend className item template template itemTemplate html initialize fu
  • 将图像从 JQuery 上传到 Node JS

    我需要从我的网站上传图像文件HTML页 但是 我不会使用form标签 因为还有其他form稍后将用于将数据传递到服务器的字段 文本字段 复选框等 我的后端在Node JS 我想要的只是从Node Js结尾 我怎样才能做到这一点 HTML d
  • Rails 是否支持侦听 UDP 套接字的简洁方式?

    在 Rails 中 集成更新模型某些元素的 UDP 侦听过程的最佳方式是什么 特别是向其中一个表添加行 简单的答案似乎是在同一进程中使用 UDP 套接字对象启动一个线程 但不清楚我应该在哪里执行适合 Rails 方式的操作 有没有一种巧妙的
  • 如何在测试用例失败时在量角器中截取屏幕截图

    我是量角器的新手 想在浏览器中截取失败的测试用例的屏幕截图 您能帮我建议一下我该怎么做吗 谢谢 您可以使用protractor jasmine2 screenshot reporter为此 它有一些很好的功能可以满足您的目的 var Htm
  • 如何刷新nodejs child_process stdin.write

    我需要在服务器端为客户端运行一个 C 程序 这个程序可以是交互式的 我正在使用 Node js child process 类 但我在这里看到一个问题 由于我需要保持程序交互 因此客户端和 Node js 服务器之间会来回交换消息 1 程序
  • 两个http请求可以合并在一起吗?如果可以的话,nodeJS服务器如何处理呢?

    昨天我做了一些关于 NodeJS 的演讲 有人问我以下问题 我们知道nodeJS是一个单线程服务器 多个请求是 到达服务器并将所有请求推送到事件循环 如果什么 两个请求同时到达服务器 服务器将如何处理 处理这种情况 我猜到了一个想法并回复如
  • 保存 Mongoose 文档时出现版本错误

    我有一个问题 不确定我是否做错了什么或者这是一个错误 我有一些产品 每一种都有一系列的变体 我想浏览一些数据并以这些变体加载它 但我遇到了许多 版本错误 找不到匹配的文档 错误 认为我遇到了竞争条件 我为我修改的每个变体依次保存相同的文档
  • 将文件编码为 Base 64 Nodejs

    我使用下面的代码将文件编码为 Base64 var bitmap fs readFileSync file return new Buffer bitmap toString base64 我认为在文件中我们有问题 and 字符 但它很好
  • 如何使用 JS 和 Chrome 控制台向频道发送 Discord 消息?

    如何使用 JS 和 Chrome 控制台在不使用 Discord API 的情况下将 Discord 消息发送到 Discord 频道 看来这是不可能的事了 打开不和谐控制台 ctrl shift i 不起作用 请参阅下面的编辑 然后进入网
  • 如何通过 Grunt 运行节点脚本?

    我希望通过我的 gruntfile 运行节点命令 我只需要运行 node index js 作为任何其他任务之前的第一个任务 我尝试四处寻找但没有找到答案 我相信这可能很简单 但我不确定如何做 我需要加载 nmp 任务吗 这就是我的 Gru
  • Ionic 框架:创建项目时 Ionic 构建失败 (v4.12.0)

    I have ionic安装在我的系统中 当我跑步时ionic run app tabs它安装了所有npm包 但随后提示符变为 Downloading binary from https github com sass node sass

随机推荐