NEWS
[gelöst]seltsamer Effekt mit „client Socket“
-
Hallo,
ich habe einen seltsamen Effekt mit setInterval(...)
ich will eine Funktion alle 10 Sekunden aufrufen. die Funktion wird aber immer "noch einmal "zusätzlich" ausgeführt, also nach 10 Sekunden 1x nach 20 Sekunden 2x nach 30 Sekunden 3x... usw.
was ist da falsch.. anbei das Skript....var net = require("net"); const crc16 = require('crc/crc16ccitt'); function calc_crc (str) { var erg =crc16(str).toString(16).toUpperCase(); //console.log ("CRC:"+erg) return erg } const host = "10.10.10.10"; const port = 5688; var client = net.Socket(); var message="" //var array[] function Hottoh_message(message) { var sendstr= "#"+message+calc_crc(message)+"\n" //console.log(sendstr) client.connect(port,host,function () { console.log("Connected "); client.write(sendstr); }); client.on("data", (data) => { console.log(`Received: ${data}`); //var arr = data.toString().split(";"); //console.log(arr.length) //arr.forEach((element) => { // console.log(element); // }); client.end(); }); client.on("error", (error) => { console.log(`Error: ${error.message}`); client.destroy(); }); client.on("close", () => { console.log("Connection closed"); client.destroy(); }); }; setInterval(Hottoh_message,10000,"00000C---0002DATR0;") //schedule('* * * * * *',function() { Hottoh_message("00000C---0002DATR0;")});
oder ist da mit net socket etwas nicht iO?
-
@stoffel67
Ich vermute, mit jedem Aufruf der Funktion "hottoh_message" werden neue Listener zu den schon bestehenden hinzugefügt. Darum sollten die "client.on" Methoden außerhalb der Funktion definiert werden. -
@marc-berg said in seltsamer Effekt mit setInterval bzw. schedule:
@stoffel67
Ich vermute, mit jedem Aufruf der Funktion "hottoh_message" werden neue Listener zu den schon bestehenden hinzugefügt. Darum sollten die "client.on" Methoden außerhalb der Funktion definiert werden.Klingt plausibel ... Aber sollten die Listener nicht mit destroy gelöscht werden?
-
@blockmove sagte in seltsamer Effekt mit setInterval bzw. schedule:
Aber sollten die Listener nicht mit destroy gelöscht werden?
Werden sie doch bei den entsprechenden Ereignissen. Wobei es wohl sinnvoll ist, vorher noch die Listener zu entfernen, sonst kann es Speicherlecks geben.
client.on("data", (data) => { console.log(`Received: ${data}`); client.end(); }); client.on("error", (error) => { console.log(`Error: ${error.message}`); client.removeAllListeners(); client.destroy(); }); client.on("close", () => { console.log("Connection closed"); client.removeAllListeners(); client.destroy(); });
-
@marc-berg said in seltsamer Effekt mit setInterval bzw. schedule:
client.removeAllListeners();
habs eingebaut... und siehe da Aufruf erfolgt jetzt nur noch einmal
wa smeinst du mir "client on" Methode ausserhald definieren? -
@stoffel67 sagte in seltsamer Effekt mit setInterval bzw. schedule:
wa smeinst du mir "client on" Methode ausserhald definieren?
Ich glaube, die Überlegung war nicht zielführend, so wie du die Funktion aufrufst.
-
@marc-berg
Sorry, aber ich versteh nicht was du damit meinst… „nicht zielführend“
(bitte die Rechtschreibfehler oben zu entschuldigen) -
@stoffel67 sagte in seltsamer Effekt mit setInterval bzw. schedule:
aber ich versteh nicht was du damit meinst… „nicht zielführend“
Ich wollte damit nur sagen, dass meine Überlegung, die "client.on" Methoden aus der Hauptfunktion auszulagern, in deinem Fall wohl nicht zum Ziel geführt hätten. Aber dafür bin ich in der Programmierung nicht fit genug. Wenn das saubere Entfernen der Listener es jetzt gebracht hat, ist doch alles gut.
-
@marc-berg
OK, jetzt hab ich‘s verstanden…
nochmals vielen Dank für den Hinweis
ich ändere noch den Titel, so ist er missverständlich…