我正在编写node.js客户端以从aprs T2服务器接收数据。当wifi稳定时,它工作正常。但是,当我手动关闭wifi时,它不会显示任何错误消息。当我再次打开wifi时,它不会尝试重新连接到T2服务器。难道没有人知道如何解决这个问题吗? 这是我的代码的一部分:
var proxy = net.connect({port:14580,host:'hangzhou.aprs2.net'},function() {
console.log("connected to server!");
proxy.write("user BG5ZZZ-92 pass XXXXX ver MY185\n#filter t/poi\n");
});
proxy.on("error",function(err){
console.log(err.message);
proxy.end();
proxy.connect({port:14580,host:'hangzhou.aprs2.net'},function() {
console.log("connected to server!");
proxy.write("user BG5ZZZ-92 pass XXXXX ver MY185\n#filter t/poi\n");
});
});
proxy.on('end',function(){
console.log("proxy unconnected.");
proxy.connect({port:14580,host:'hangzhou.aprs2.net'},function() {
console.log("connected to server!");
proxy.write("user BG5ZZZ-92 pass XXXXX ver MY185\n#filter t/poi\n");
});
})
客户端始终显示"已连接到服务器!",但不再收到任何数据。
答案 0 :(得分:0)
问题在于没有可靠的方法来检测死连接。操作系统通常具有一些设置,可以更改底层TCP堆栈如何使用keepalive探针自动重置连接的行为。但问题是,这些keepalive探测的时间往往导致连接超时很长。
因此,检查死连接的更好方法是使用应用程序级ping消息。如果一方在y时间内发送x数量的ping而没有对这些ping的任何答案,那么你应该考虑连接死机并尝试强行重新连接。这就是OpenSSH实现keepalive的方式。