August 20, 2025

Nachrichten flexibel verteilen

symolo dmb server

Weiterlesen
April 30, 2024

Sortiert bleiben

Sortierverfahren

Weiterlesen
Januar 11, 2024

Konsolen-fu

Dateiliste in Konsole

Weiterlesen
Dezember 7, 2023

Finden und gefunden

find unter Linux

Weiterlesen
Cover Image

Nachrichten flexibel verteilen

symolo dmb server

August 20, 2025 - Lesezeit: 5 Minuten

Das Problem mit klassischer Nachrichtenverteilung

Wer schon einmal Systeme gebaut hat, bei denen viele Clients gleichzeitig Nachrichten empfangen und verarbeiten sollen, kennt das Problem: Wie verteile ich Messages effizient, ohne dass ein zentraler Server jede Nachricht individuell zustellen muss? Oft wird dabei auf klassische Message-Broker wie Kafka, RabbitMQ oder MQTT gesetzt. Diese bringen aber ihre eigene Komplexität mit – Setup, Konfiguration, Rechte- und Themenverwaltung. Für viele Szenarien, in denen man einfach nur schnell und flexibel Daten „in die Runde werfen“ möchte, sind solche Schwergewichte schlicht überdimensioniert.

Genau hier setzt der dynamic messaging broadcast server von Symolo an: Ein einfacher Ansatz, Nachrichten über TCP-Sockets (genauer gesagt WebSockets) an viele Teilnehmer gleichzeitig zu verteilen.

Besonderheit: TCP statt UDP-Broadcast

Ein wichtiger Unterschied zu klassischen Broadcast-Mechanismen liegt in der Wahl des Protokolls: TCP. Während UDP-Broadcasts nur innerhalb eines lokalen Netzwerks funktionieren – also typischerweise nicht über Routergrenzen hinweg –, ermöglicht TCP die Kommunikation über das Internet hinweg.

Das bedeutet:

  • UDP-Broadcast ist auf ein Subnetz beschränkt (praktisch für lokale Service Discovery, aber nicht für weltweite Kommunikation).
  • TCP hingegen stellt eine zuverlässige, verbindungsorientierte Kommunikation sicher – und funktioniert genauso gut innerhalb eines LANs wie zwischen Clients auf verschiedenen Kontinenten.

Dadurch ist es möglich, dass sich beliebige Teilnehmer – unabhängig von ihrem Standort – in die Nachrichten-Pipeline „reinhängen“ und sofort Teil des Systems werden.

Integration in den Symolo DSF-Server

Ein weiterer Vorteil: Das Tool ist bereits fester Bestandteil des Symolo DSF-Servers. Das bedeutet, bei jeder Installation des DSF-Servers steht die Nachrichten-Pipeline sofort zur Verfügung – ohne zusätzlichen Setup-Aufwand oder externe Abhängigkeiten. Entwickler und Administratoren müssen nichts weiter konfigurieren, sondern können direkt nach der Installation Clients anbinden, Filter setzen und Nachrichten verteilen. Damit wird die Funktion nahtlos in bestehende Symolo-Workflows integriert und ist „out of the box“ einsatzbereit.

Wie funktioniert das?

Die Grundidee ist simpel:

  • Jeder Client verbindet sich über einen WebSocket mit dem Server.
  • Nach der Authentifizierung „hört“ er auf die Nachrichten, die in die „Pipe“ eingespeist werden.
  • Jede Nachricht (außer Befehle, die mit / beginnen) wird an alle Clients verteilt.
  • Die Clients selbst entscheiden dann mithilfe von Filtern, ob sie eine Nachricht weiterverarbeiten wollen oder nicht.

Das Besondere: Jeder, der verbunden ist, kann nicht nur empfangen, sondern auch senden. Dadurch entsteht ein sehr flexibles Kommunikationsmodell, das sowohl für Debugging, Event-Streaming als auch für kollaborative Anwendungen nützlich ist.

Konkretes Beispiel

Sehen wir uns an, wie ein Client aussieht, der sich mit dem Symolo-Server verbindet:

const dmbLogger = new WebSocket("wss://<MEINSERVER>/dmb");

dmbLogger.onopen = () => {
    dmbLogger.send("123"); // Erst Authentifizierung mit Passwort
};

dmbLogger.onmessage = (d) => {
    // Nach erfolgreicher Authentifizierung
    if (d.data === "Welcome") {
        // Filter setzen – in diesem Fall nur Nachrichten, die mit "MDE" beginnen
        dmbLogger.send("/filter.add>MEINFILTER");
    }
    // Ab jetzt kommen gefilterte Nachrichten an
    if (d.data.startsWith("MEINFILTER")) {
        const msgSplit = d.data.split('|');
        console.log("Gefilterte Nachricht:", msgSplit);
    }
};

Was passiert hier?

  1. Verbindung & Authentifizierung Der Client verbindet sich mit wss://<MEINSERVER>/dmb und sendet als Erstes ein Passwort.

  2. Willkommensnachricht Der Server bestätigt den erfolgreichen Login mit "Welcome".

  3. Filter setzen Anschließend legt der Client fest, welche Nachrichten er empfangen möchte (z. B. /filter.add>MDE).

  4. Nachrichten empfangen & verarbeiten Alle Nachrichten, die mit MEINFILTER beginnen, landen nun im Client, werden geparst und können beliebig weiterverarbeitet werden.

Fazit

Mit diesem Ansatz gelingt es Symolo, ein leichtgewichtiges, flexibles Nachrichtenverteilungssystem bereitzustellen, das ganz ohne schwerfällige Broker-Lösungen auskommt. Jeder Client kann gleichzeitig Sender und Empfänger sein, und durch die Filterlogik bleibt die Datenflut dennoch kontrollierbar.

Besonders spannend ist der Einsatz von TCP statt UDP-Broadcast: Nachrichten können nicht nur im lokalen Netz, sondern auch problemlos über das Internet verteilt werden – ohne auf spezielle Netzwerk-Setups angewiesen zu sein.

Ob für Debugging, Monitoring oder den schnellen Aufbau von Echtzeitkommunikation – dieses Modell zeigt, wie einfach Messaging über TCP-Sockets sein kann.


Cover Image

Sortiert bleiben

Sortierverfahren

April 30, 2024 - Lesezeit: 3 Minuten

Es gibt ein ganze Menge verschiedener Sortierverfahren, die man benutzen kann um etwas Ordnung in das Chaos zu bekommen. Jedes Verfahren hat bei vor und Nachteile.Wenn man in Javascript nicht selber sortiert, sondern das dem Browser überlässt ist es natürlich irrelevant, welches Verfahren tatsächlich verwendet wird. Trotzdem kann das beschäftigen mit diesen Verfahren neue Denkanstöße liefern.

Der Bubble Sort

Bei diesem Verfahren "blubbern" die Werte einfach nach oben. Das Verfahren ist langsam und eignet sich nur bedingt für große Mengen. Aber es ist einfach zu verstehen und genauso einfach zu implementieren.

Laden...

Der Selection Sort

Dieses Verfahren "selektiert" die zu sortierenen Einträge vorher und ist daher effizienter als Bubble Sort.

Laden...

Der Insertion Sort

Bei diesem Verfahren werden die Einträge an der richtigen Stelle einsortiert. Es eignet sich am besten für vorsortierte Werte, bei denen ein neuer Wert an die passende Stelle hinzugefügt werden soll.

Laden...

Der Quick Sort

Der Quicksort teilt die Arbeit in kleine Teilabschnitte auf und muss nicht erneut bereits sortierte Abschnitte prüfen. In dem Beispiel habe ich mehr Werte genommen, da ansonsten die ganze Power den Verfahrens nicht richtig sichtbar wird.

Laden...


Cover Image

Konsolen-fu

Dateiliste in Konsole

Januar 11, 2024 - Lesezeit: ~1 Minute

Da wollte ich mal schnell ne Dateiliste ziehen um damit weiterzuarbeiten. Unter Windows kann man folgenden Befehl erfolgreich einsetzen:

C:\> dir /b

Kann man unter Linux auch probieren. Klappt nicht so. Statt dessen nimmt man ls. Aber ls hat so schöne viele verschiedene Parameter. Schnell in die Man-Page nachgeschaut:

/> ls -1b

So, jetzt haben wir die Liste. Elektronisch verarbeitbar wäre sie aber erst, wenn ich das in einer Datei hab. Also shiften wir die Ausgabe einfach in eine Datei um:

C:\> dir /b >> list.txt

oder in Linux

/> ls -1b >> list.txt

Macht einem die Arbeit wirklich leichter.


Cover Image

Finden und gefunden

find unter Linux

Dezember 7, 2023 - Lesezeit: 2 Minuten

Wenn man Dateien sucht, ist das gerade, wenn Dateien vom System erstellt werden, immer etwas mühselig. Das wird sogar noch schlimmer, wenn man die dann löschen will. Unter Linux, wo auch sonst, gibt es einen tollen Befehl, der einem die Arbeit deutlich erleichtert:

find

Mithilfe von find kann man einfach Dateien anhand eines Filter finden und dann sogar direkt löschen. Das kann zum Beispiel so aussehen:

find -name "*.cs" -type f

Hier suche ich alle cs Dateien im aktuellen Ordner. Ich schränke auch auf Dateien ein (-type f)

find -not -name "*.cs" -type f

Hier suche ich nach allen Dateien, die keine cs Dateien sind. So einfach.

find ./ -not -name "*.cs" -type f

Durch den verweis auf einen Pfad geben ich an ob auch Unterordner durchsucht werden sollen. Und das Ganze kann ich jetzt sogar noch kombinieren:

find ./ -name "*.*_*" -not -name "*.cs" -type f

Und wenn ich mir dann habe ausgeben lassen, was die Suche so ergibt, kann ich, entsprechende Rechte vorausgesetzt, das Ganze direkt löschen:

find ./ -name "*.*_*" -not -name "*.cs" -type f -delete

Aber aufpassen, der fragt nicht nochmal nach.

Gibt's das auch für nativ Windows? Bestimmt, aber da würde ich es wahrscheinlich lieber selber schreiben...