NEWS
Adapter stateChange Event Verhalten
-
Hallo zusammen,
versuche schon seit geraumer Zeit mich mit einer Adapterentwicklung auseinander zu setzen und habe ein Verhalten im Adapter, was ich so nicht verstehe. Folgende Konfiguration:
Mein Testadapter abonniert einen ForeignState hier eine IP-Adresse vom Ping-Adapter. Diese IP-Adresse wird vom Ping-Adapter fleissig gepingt , und ich bekomme permanent ein Event ‚stateChange‘ true zurück (jedesmal nach einem ping request) obwohl sich der Status/Wert nie ändert.
Was könnte der Grund sein ?
-
Naja, der Grund ist das bei Adaptern bei jeder Änderung auf subscribed States getriggert wird. Wenn du Wissen willst ob sich der Wert geändert hat Must du dir den Wert vorher merken und vergleichen.
-
Naja, der Grund ist das bei Adaptern bei jeder Änderung auf subscribed States getriggert wird. Wenn du Wissen willst ob sich der Wert geändert hat Must du dir den Wert vorher merken und vergleichen. `
Aha :?: :!:
Aber das ist für mich ein Widerspruch, es hat sich nichts beim Ping-Adapter geändert, aber mein Adapter bekommt ein stateofChange.
Dann fehlt wohl dem Admin die Logik eine Wertänderung festzustellen und verteilt alle Werte bei setState ohne Prüfung einfach an alle Abonnenten. Das ist elementar, den das treibt die Systemlast hoch bei vielen abonnierten Werten, denn die Events werden immer generiert auch wenn sich nichts ändert . Da sollte mal in der Doku erwähnt werden.
Wäre es denn nicht sinnvoller wenn der Ping-Adapter das machen würde, nur dann setState aufrufen wenn der PingStatus sich ändert, dies sollten dann alle Adapter so machen.
-
Aber das ist für mich ein Widerspruch, es hat sich nichts beim Ping-Adapter geändert, aber mein Adapter bekommt ein stateofChange. `
Und wenn du im Adapter auf eine Aktualisierung lauschen willst und nicht eine (wirkliche) Änderung? Dann geht das nur, wenn der Controller alle Events sendet und den Adaptern das Filtern überlässt.Da sollte natürlich darauf geachtet werden, dass nicht auf sämtliche States gelauscht wird, etwa per
adapter.subscribeForeignStates("*")
sondern nur die, die tatsächlich benötigt werden.
> Wäre es denn nicht sinnvoller wenn der Ping-Adapter das machen würde, nur dann setState aufrufen wenn der PingStatus sich ändert, dies sollten dann alle Adapter so machen.
Da hast du möglicherweise Recht!