【发布时间】:2017-10-27 23:21:30
【问题描述】:
我想知道在 net.Socket() 上使用 socket.write() 发送数据时是否可以检测服务器是否离线。我假设在尝试写入断开连接的服务器的套接字后会触发错误事件或超时事件,但我无法让它工作。它只是触发 socket.write 并且没有任何反应。这是一些示例代码。
try {
socket = new net.Socket();
socket.connect(data.port, data.address);
} catch (error) {
console.log(error);
}
socket.on('connect', function() {
interval = setInterval(function() {
socket.write('sending message');
}, 1000);
});
socket.on('error', function(error) {
clearInterval(interval);
socket.destroy();
socket.unref();
console.log(error);
});
[编辑 1]
一个肮脏的解决方案是下面的代码,但这感觉不对。它在写入套接字时设置一个计时器。如果收到数据(在我的情况下是写入套接字后的情况),则取消计时器。如果定时器没有取消,socket 将被销毁。
try {
socket = new net.Socket();
socket.connect(data.port, data.address);
} catch (error) {
console.log(error);
}
socket.on('connect', () => {
interval = setInterval(function() {
socket.write('sending message', () => {
timeout = setTimeout(() => {
socket.destroy();
socket.unref();
}, 4000);
});
}, 5000);
});
socket.on('error', (error) => {
clearInterval(interval);
socket.destroy();
socket.unref();
console.log(error);
});
socket.on('data', (message, address) => {
clearTimeout(timeout);
})
【问题讨论】:
-
因为关闭事件没有触发。
-
我已经用一个肮脏的变通方法解决了我的问题。不过感觉不对。
标签: javascript sockets