Warning: unlink(./app/code/core/clean.php): No such file or directory in /data/www/11_wordpress/11_wordpress__flyacts__flyacts/wp-includes/cron.php on line 537 Warning: unlink(./app/code/core/clear.php): No such file or directory in /data/www/11_wordpress/11_wordpress__flyacts__flyacts/wp-includes/cron.php on line 538 Nodejs - Tasks blockieren mit Locker | FLYACTS - Die App Agentur

node.js – Tasks blockieren mit dem Modul “Locker”

Ein Vorteil von node.js ist die Asynchronität. Leider kann diese äußerst positive Eigenschaft dem Entwickler in einigen Spezialfällen starkes Kopfzerbrechen bereiten. Als Beispiel haben wir eine API geschrieben, die Anfragen entgegennimmt und Daten aus einer Datenbank ausliest und schreibt bzw. löscht. Zusätzlich wird auf dem Dateisystem gearbeitet und Dateien werden kopiert und archiviert. Da es sich um sensible Daten handelt, sollte beim Archivieren oder auch beim Kopieren von den Dateien nichts schief gehen. Kommen nun zwei Anfragen an, die den länger dauernden Prozess anstoßen, überschneiden sich diese und können dadurch möglicherweise nicht erfolgreich ausgeführt werden.

Wie lässt sich nun ein Codeblock oder etwa ein API-Endpunkt für weitere Anfragen blockieren?

Man könnte erahnen, dass an dieser Stelle ein Locking-Mechanismus bzw. im übertragbaren Sinne Semaphoren die Lösung wäre.

Hier setzen die node-Module von Ian Babrou an. Sein Ansatz besteht aus zwei Modulen. Das erste Modul befasst sich mit einem eigenen Locking Server und das zweite mit der Implementierung des Locks an sich.

Locking Server

Der Lock Server namens “locker” ist eine eigene kleine node.js-App, die einzelne Tasks verwaltet und den Zugriff steuert.

Es besteht natürlich die Möglichkeit den Server in der eigenen Anwendung zu integrieren. Um die Ausführung der eigenen App jedoch nicht zu behindern, lässt sich dieser Teil auch auslagern.

Locking Client

Der zweite Teil ist der Locker Client. Nach dem Laden des Modules kann um einen eigenen Codeblock, beispielsweise dem Inhalt einer Funktion eines API Endpunktes, ein Locking gebaut werden. Dies geschieht über die Funktion “locked”, welche vier Parameter erwartet. Als erstes sollte ein vernünftiger und eindeutiger Name vergeben werden. Danach kommen zwei Zeitangaben in Millisekunden. Die erste ist die Wartezeit um selbst den Task (das Lock) zu bekommen und die zweite ist ein Timeout, wie lange die Ausführung des Tasks maximal dauern darf. Der letzte Parameter ist eine Callback-Funktion, die ausgeführt wird, wenn man das Lock erhalten hat. Zusätzlich bietet Locker grundlegende Events, um auf verschiedene Zustände des Locker Servers zu reagieren.

Fazit

Wer auf der Suche nach einer schnellen und eleganten Lösung eines Locking-Mechanismus ist, liegt bei Locker nicht falsch. Schnell installiert und leicht einsetzbar. Gerade wenn man einen kleinen Blick in eine – hoffentlich – nicht allzu ferne Zukunft wirft und das node.js-Clustering-Modul endlich als stabil gekennzeichnet wird, ist der Ansatz von Ian Babrou gold wert.

Wir freuen uns über eine Bewertung, um ein Feedback zu erhalten:

Es gibt noch keine Bewertungen.

Ein Kommentar zu “node.js – Tasks blockieren mit dem Modul “Locker”

  1. … ich interessiere mich sehr für einen Austausch und würde eventuell dedizierte Aufgaben als Auftrag vergeben. Tasks zu blockieren hört sich zwar nicht besonders elegant an, könnte aber ein Problem, dem ich mich aktuell gegenübersehe, lösen (https://h5c4us.com ist (bis auf ca. 10 Zeilen HTML) reines Javascript. Macht Spaß – aber man muß ja nicht alles selbst machen 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.