Я использую node net для создания простого серверного / клиентского приложения, которое отправляет и получает сообщения.
Однако при тестировании приложения я обнаружил, что когда соединение наполовину открыто (т.е. я закрываю Wi-Fi для сервера), клиент продолжает писать (это интервал) и возвращает истину, и ошибка никогда не возникает!
Пример кода службы:
import * as net from "net";
export class TcpService {
private client;
public isConnected: boolean = false;
constructor(port: number, ip: string, cb: Function) {
this.client = net.createConnection(
{ port, host: ip, allowHalfOpen: false },
() => {
console.log("TCP Connected");
this.client.setKeepAlive(true, 10000);
this.isConnected = true;
cb();
}
);
}
onReceiveMsg(cb) {
this.client.on("data", msg => {
cb(msg);
});
}
write(msg, encoding?: string, cb?: Function) {
return this.client.write(msg, encoding => {
if (cb) {
cb();
}
console.log("WRITTEN", this.client.bytesWritten);
});
}
onClose(cb) {
this.client.on("close", () => {
this.isConnected = false;
console.log("TCP Connection closed");
cb();
});
}
onError(cb) {
this.client.on("error", err => {
console.log("TCP Err", err);
this.isConnected = false;
cb(err);
});
}
sendHeartBeat() {
return this.write(".\n");
}
}
КлиентОбразец:
import { TcpService } from "./app/services/tcp.service";
import { ip, port, heartBeatFrequency } from "./app/config/tcp.config";
const onTCPConnected = () => {
// Init HeartBeat
const sendHeartBeat = () => {
if (tcpService.isConnected) {
console.log("Heart Beat: ", tcpService.sendHeartBeat());
} else {
clearInterval(heartBeatInterval);
console.log("Connection Dropped");
}
};
const heartBeatInterval = setInterval(sendHeartBeat, heartBeatFrequency);
};
const tcpService = new TcpService(port, ip, onTCPConnected);
tcpService.onError(err => {
console.log("TCP CONNECTION ERROR:", err);
});
tcpService.onClose(() => {
console.log("TCP CONNECTION CLOSED");
});