net.Socket()でsocket.write()を使用してデータを送信するときにサーバーがオフラインであるかどうかを検出できるかどうかを知りたいと思います。私はエラーイベントまたはタイムアウトイベントは、切断されたサーバーのソケットに書き込もうとした後にトリガーされるだろうと仮定しますが、これは動作することができません。それは単にsocket.writeを起動し、何も起こりません。ここにいくつかのサンプルコードがあります。node.js net.Socket 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);
});
[EDIT 1]
汚れた溶液を、以下のコードであろうが、これは右感じていません。ソケットに書き込むときにタイマーを設定します。データが受信された場合(私の状況ではソケットに書き込んだ後の場合)、タイマーはキャンセルされます。タイマがキャンセルされないと、ソケットは破棄されます。デフォルトnet.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);
})
閉じるイベントが発生しないためです。 – Solide
私は自分の問題を汚れた解決策の解決策で編集しました。それは右の気分ではありません。 – Solide