如何在NodeJS中testingsocket.setKeepAlive

我试图在NodeJS中testingsetKeepAlive()的function。 我在同一本地networking中的不同机器上运行Server.js和client.js。 然后,我closures了客户机上的无线连接(打破了互联网连接)。 15分钟后,仍然没有消息。 这是为什么? 没有设置KeepAlive()的工作?

这里是服务器和客户端的代码:

Client.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); }); 

Server.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),如果延迟<往返(?)

我认为原来的keepalivefunction是不可靠的。 我已经在其他编程语言(C#和C)上成功启用了它,我可以跟踪networking并查看KEEP_ALIVE包,但在某些情况下(特殊networkingconfiguration,人们可能在虚拟机上运行应用程序…)

所以我build议你自己实现它,你可以使用相同的API实现一个你自己的套接字,但也有你的新的存活function。