Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst]seltsamer Effekt mit „client Socket“

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    [gelöst]seltsamer Effekt mit „client Socket“

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      stoffel67 last edited by stoffel67

      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?

      Marc Berg 1 Reply Last reply Reply Quote 0
      • Marc Berg
        Marc Berg Most Active @stoffel67 last edited by

        @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.

        B 1 Reply Last reply Reply Quote 0
        • B
          Blockmove @Marc Berg last edited by

          @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?

          Marc Berg 1 Reply Last reply Reply Quote 0
          • Marc Berg
            Marc Berg Most Active @Blockmove last edited by

            @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();
            });
            
            S 1 Reply Last reply Reply Quote 1
            • S
              stoffel67 @Marc Berg last edited by

              @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?

              Marc Berg 1 Reply Last reply Reply Quote 0
              • Marc Berg
                Marc Berg Most Active @stoffel67 last edited by

                @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.

                S 1 Reply Last reply Reply Quote 0
                • S
                  stoffel67 @Marc Berg last edited by

                  @marc-berg
                  Sorry, aber ich versteh nicht was du damit meinst… „nicht zielführend“
                  (bitte die Rechtschreibfehler oben zu entschuldigen)

                  Marc Berg 1 Reply Last reply Reply Quote 0
                  • Marc Berg
                    Marc Berg Most Active @stoffel67 last edited by

                    @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.

                    S 1 Reply Last reply Reply Quote 0
                    • S
                      stoffel67 @Marc Berg last edited by

                      @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…

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      913
                      Online

                      31.6k
                      Users

                      79.5k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      366
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo