Zum Hauptinhalt springen

10. Ereignis-Stream-Listener

Veranstaltungskanal(Anschluss 10020) verbunden und gibt Systemereignisse aus, wobei beliebige Filterung nach Ebene, Namensmuster und Ausschlusskriterien erfolgt. Da es sich um einen schreibgeschützten Modus handelt, werden weder Sitzungsprofile noch Befehle gesendet.

Was Sie in diesem Tutorial lernen werden:

  • Als passiver BeobachterEreignis WebSocket(Anschluss 10020) zu abonnieren
  • Veranstaltung JSONAnalyse — level、name、category、data、message
  • Filterung nach dem niedrigsten Schweregrad
  • Namensabgleich und -ausschluss mithilfe von Platzhaltern
  • Verwenden Sie dieses Tutorial zusammen mit anderen Tutorials, umRegelkreise zu benchmarken.

Workflow​

  1. CLI-Flag (--level、--name、--exclude、--no-hide-rate、--port) analysieren.
  2. ws://localhost:10020(Veranstaltungskanal) verbunden. Da es als schreibgeschützter Beobachter fungiert, wird kein Sitzungsprofil gesendet.
  3. Für jede empfangene Nachricht wird das Ereignis-JSON-Datenformat analysiert und ein Filter angewendet:
    • level Wenn der Wert unter dem Mindestschweregrad liegt, wird er verworfen.
    • --name Wenn ein Muster angegeben ist, wird der Eintrag verworfen, sofern er nicht mit einem der Muster übereinstimmt (name Einzeln oder category/name (wird abgeglichen).
    • --exclude Wenn eine Übereinstimmung mit einem der Muster vorliegt, wird die Nachricht verworfen.
  4. Die verbleibenden Ereignisse nach Level, Bezeichner, (optionaler) Meldung, (optionaler)data wird zusammen mit der Nutzlast ausgegeben.

Parameter​

FlagStandardVerwendungszweck
--port10020Port des Ereigniskanals
-l, --levelinfoNiedrigster Schweregrad.info、notice、warning、error、critical、panic eines von beiden
-n, --name(keine)Nur Ereignisse anzeigen, die dem Muster entsprechen (glob, mehrere Angaben möglich)
-x, --exclude(keine)Ereignisse ausblenden, die einem Muster entsprechen (glob, mehrere Angaben möglich)
--no-hide-ratefalsesystem-rate-report Ereignisse einbeziehen (standardmäßig ausgeblendet – da sie sehr viel Rauschen verursachen)
Benchmark für Regelkreise

Führen Sie ein beliebiges Tutorial (04-hello-floor, 05-position-control, 06-combined...) in einem Terminal aus und in einem anderen Terminal --no-hide-rate Führen Sie den angegebenen Ereignis-Listener aus.system-rate-report Die Veranstaltung umfasst die effektive Tick-Rate der Geräte. Vergleichen Sie die Python-/C++- und die nlohmann-/C++-Glaze-Versionen desselben Tutorials und überprüfen Sie den Overhead bei der Serialisierung in einem Regelkreis mit etwa 4 kHz.

# Terminal 1 — pick a variant
./04-haply-inverse-hello-floor # C++ nlohmann
./04-haply-inverse-hello-floor-glz # C++ Glaze
python 04-haply-inverse-hello-floor.py # Python

# Terminal 2 — watch the rate
./10-haply-inverse-events --no-hide-rate

Ausgelesene Zustandsfelder​

Jede empfangene Nachricht stellt ein Ereignis dar:

  • level — Schweregrad der Zeichenfolge (info ... panic)
  • name — Name der Veranstaltung (Beispiel: device-connected、system-rate-report)
  • category — Kategorie (Beispiel: device、session、system)
  • message — Eine beliebige, für Menschen lesbare Zeichenfolge
  • data — Beliebige verschachtelte JSON-Nutzdaten (das Format variiert je nach Ereignis)

Eine vollständige Übersicht über alle Ereignisse finden Sie unter „Ereignisse und Überwachung “.

Senden / Empfangen​

Für das passive Abonnement,recv() Es wird ausschließlich verwendet, es wird nichts zurückgegeben. Alle drei Varianten implementieren dieselbe Filter-Pipeline. Ein besonderer Aspekt der Inverse-API ist die Struktur der Ereignisobjekte.

async for msg in websocket ist die kürzeste Schreibweise für eine reine Empfangsschleife.

async with websockets.connect(uri) as websocket:
async for msg in websocket:
try:
event = json.loads(msg)
except json.JSONDecodeError:
continue

if accept_event(event, min_level_index, name_patterns, exclude_patterns):
print(format_event(event))
Im SDK-Installationsprogramm enthalten

Auch Tutorial 10 ist zusammen mit dem SDK lokal installiert. Im Installationsverzeichnis des Dienstes befindet sich tutorials/10-haply-inverse-events/ Bitte überprüfen Sie dies.

Quelle: Python · C++ · C++ Glaze

Siehe auch: Ereignisse und Überwachung · WebSocket-Protokoll