我试图在NodeJS中测试setKeepAlive()的功能。我在同一局域网内的不同计算机上运行Server.js和client.js。然后,我关闭了客户端计算机上的wifi连接(断开了Internet连接)。 15分钟后,仍然没有消息被抛出。这是为什么? setKeepAlive()不起作用吗?
这是服务器和客户端的代码:
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),如果delay
我认为原始的keepalive功能不可靠。我已经成功启用了其他编程语言(C#和C),并且可以跟踪网络并看到KEEP_ALIVE数据包,但是在某些情况下它不起作用(特殊的网络配置,人们可能会在虚拟机中运行应用程序,...)
因此,我建议您自己实现它,您可以使用相同的API实现自己的套接字,但还应具有新的keepalive功能。
关于node.js - 如何在NodeJS中测试socket.setKeepAlive,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20561596/