Sha*_*eal 5 sockets tcp node.js
我尝试在 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);
});
Run Code Online (Sandbox Code Playgroud)
服务器.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);
Run Code Online (Sandbox Code Playgroud)
我会使用 setInterval(sendKeepAliceFunc, delay) 和 socket.setTimeout() 自己实现 keep_alive
keep_alive 消息之间的延迟应该足够大(~10000ms),如果延迟<往返(?),则无效
我认为原来的keepalive功能并不可靠。我已成功在其他编程语言(C# 和 C)上启用它,并且我可以跟踪网络并查看 KEEP_ALIVE 数据包,但在某些情况下它不起作用(特殊网络配置,人们可能在虚拟机中运行应用程序,...)
所以我建议你自己实现它,你可以使用相同的 API 实现你自己的套接字,但也有你新的 keepalive 功能。
| 归档时间: |
|
| 查看次数: |
3815 次 |
| 最近记录: |