Ein Angebot von

Reactive Extensions – Alles ist ein Event!

| Autor / Redakteur: Marko Beelmann* / Christine Kremser

(Bild: gemeinfrei/Pixabay / CC0)

Mit Hilfe der Reactive Extensions können Events in Streams umgewandelt und leicht koordiniert werden. Durch Hilfe von Schedulern wird auch die asynchrone Verarbeitung deutlich erleichtert.

Jeder der ein Smartphone besitzt, schätzt die vielen Funktionen der Geräte. Sei es Navigation, Fitness-Tracking, Chat, Wasserwage oder Top-News direkt auf das Smartphone. All diese Funktionen beherrscht das Smartphone mehr oder weniger gut. Für die Softwareentwicklung heißt das auf der anderen Seite aber auch, auf viele Events zu reagieren.

Seien es Koordinaten vom GPS, Daten von Sensoren oder Push-Nachrichten aus der Cloud. Diese Flut an Events muss eine Software intelligent und für den Nutzer transparent verarbeiten können. Bei Smartphones sollte eine Oberfläche aufgrund einer Eventflut nicht in einen blockierenden Zustand geraten.

Es sind aber nicht nur Smartphones die dieser „Eventflut“ gegenüber stehen. Auch die zunehmende Vernetzung der uns umgebenen Geräte wird zu einer großen Anzahl von Events führen, die wiederum von einer Software verarbeitet werden muss. Auch die immer weiter verbreiteten Cloud-Services sorgen für einen kontinuierlichen Fluss an Events.

Der klassische Ansatz, um auf diese asynchronen Events zu reagieren sind Callbacks, die beim Eintreffen eines Events gerufen werden. Allerdings kann dieser Ansatz bei einer großen Anzahl von Events und vor allem auch vieler verschiedener Eventquellen sehr unübersichtlich und ineffizient werden. Eventquellen mit einer hohen Frequenz an Events können eine Software schnell in Performanz-Probleme bringen.

Um solch beschriebene Probleme zu verhindern bieten sich die Reactive Extensions an. Diese Software-Bibliothek(en) kommt ursprünglich aus dem Hause Microsoft und wurden 2012 als Open-Source freigegeben. Seit dieser Zeit wächst die Zahl der unterstützen Programmiersprachen kontinuierlich an.

Events abstrahieren

Für so ziemlich jede verbreitete Sprache existiert eine Erweiterung die das Konzept des „Reactive Programming“ unterstützt. Doch worum geht es dabei eigentlich genau? Im Kern geht es vor allem um die Abstraktion von Events oder anderer Datenquellen als Stream von Events.

Diese Eventstreams werden durch ein sogenanntes Observable abgebildet. Diese Observables ähneln vom Grundsatz dem Observer-Pattern der „Gang of Four“. Durch eine „Subscription“ kann der Entwickler sich auf das Observable registrieren. Für eine erfolgreiche Registrierung muss der Aufrufer einen sogenannten Observer übergeben. Dieser enthält bis zu drei Callbacks die auf den Eventstream reagieren sollen.

Ein Callback ist für die eigentliche Eventverarbeitung gedacht. Taucht ein Event innerhalb des Observerable auf, so wird der Callback gerufen. In der Regel wird dann vom Observable die Methode OnNext() des Observer gerufen. Neben der OnNext() Methode besitzt der Observer noch zwei weitere Callbacks. OnError() und OnCompleted() geben den Status des Observable wieder. OnError() wird bei einem Fehler in dem EventStream aufgerufen.

Somit hat der Entwickler die Möglichkeit, explizit auf Fehler in einem Eventstream zu reagieren. Wird OnCompleted() gerufen, so wird von diesem Observable kein Event mehr ausgehen. Der Eventstream ist geschlossen.

Vor allem die Benachrichtigung über Fehler im Eventstream kann sehr nützlich sein um sich etwa wieder direkt auf einen neuen Stream zu registrieren oder den Nutzer über die Probleme einer Eventquelle zu informieren. Aber auch der Aufruf von OnCompleted() kann nützlich sein um etwa die Netzwerkverbindung eines Eventstreams zu schließen.

Inhalt des Artikels:

Kommentar zu diesem Artikel abgeben

Schreiben Sie uns hier Ihre Meinung ...
(nicht registrierter User)

Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
Kommentar abschicken
copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 44308945 / Open Source)