当wifi关闭时,node.js net connect不会显示错误

时间:2015-06-08 23:56:50

标签: node.js

我正在编写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");
    });
})

客户端始终显示"已连接到服务器!",但不再收到任何数据。

1 个答案:

答案 0 :(得分:0)

问题在于没有可靠的方法来检测死连接。操作系统通常具有一些设置,可以更改底层TCP堆栈如何使用keepalive探针自动重置连接的行为。但问题是,这些keepalive探测的时间往往导致连接超时很长。

因此,检查死连接的更好方法是使用应用程序级ping消息。如果一方在y时间内发送x数量的ping而没有对这些ping的任何答案,那么你应该考虑连接死机并尝试强行重新连接。这就是OpenSSH实现keepalive的方式。