メインコンテンツへスキップ

10. イベントストリームリスナー

…と接続します イベントチャンネル (ポート 10020) システムイベントを出力します。必要に応じて、重大度、名前パターン、除外項目に基づいてフィルタリングすることもできます。読み取り専用です。セッションプロファイルは作成されず、コマンドは送信されません。

学習内容:

  • 購読する イベント - WebSocket (ポート 10020) 受動的な観察者として
  • これを解析する イベント-JSON — level, name, category, data, message
  • 深刻度の低い順にフィルタリング
  • プレースホルダーおよび除外条件を用いた名前照合
  • このチュートリアルを、他の任意のチュートリアルと組み合わせて、制御ループのベンチマークを行う

手順​

  1. CLIフラグの解析 (--level, --name, --exclude, --no-hide-rate, --port).
  2. 「接続先」 ws://localhost:10020 herstellen (der イベントチャンネル) — これは読み取り専用のオブザーバーであるため、セッションプロファイルは送信されません。
  3. 受信するメッセージごとに、イベントJSONを解析し、フィルタを適用します:
    • 以下の場合は却下する level 最低の重症度を下回っている。
    • Wenn --name- 例として挙げられているものが該当しない場合は、それらを破棄する(いずれにも該当しない場合、 name 単独で、あるいは対して category/name).
    • もしあるなら --exclude-該当する場合は、破棄する。
  4. 深刻度、正式名称、オプションのメッセージ、およびオプションの data-積載量を出力する。

パラメータ​

旗標準Zweck
--port10020イベントチャンネルのポート
-l, --levelinfo重症度の最低レベル — そのうちの1つ info, notice, warning, error, critical, panic
-n, --name(keiner)パターンに一致するイベントのみを表示する(グローバル、繰り返し可能)
-x, --exclude(keiner)パターンに一致するイベントを非表示にする(グローバル、繰り返し可能)
--no-hide-ratefalsesystem-rate-report-イベントを含める(デフォルトでは非表示 — 出力量が非常に多くなる)
制御ループのベンチマーク

ターミナルで任意のチュートリアル(04-hello-floor、05-position-control、06-combined...)を実行し、イベントリスナーを --no-hide-rate 別のものの中で。その出来事 system-rate-report このデバイスにおける実効クロック周波数が記載されています。同じチュートリアルの「Python / C++ nlohmann」版と「C++ Glaze」版を比較し、約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

読み込まれた状態フィールド​

受信するメッセージは、それぞれが個別のイベントです:

  • level — 重症度を文字列として(info ... panic)
  • name — イベント名(例: device-connected, system-rate-report)
  • category — カテゴリ(例: device, session, system)
  • message — オプション、人間が読み取れる文字列
  • data — オプションのネストされたJSONペイロード(形式はイベントによって異なる)

イベントカタログ(完全版):イベントと監視。

送信/受信​

Passives Abonnement — のみ recv() が使用されます。何も返されません。3つのバリエーションすべてが同じフィルタパイプラインを実装していますが、興味深い点として、Inverse API 特有の部分はイベントオブジェクトの形式です。

async for msg in websocket これは、純粋な受信ループの最も短い形式である。

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))
SDKインストーラーに含まれています

チュートリアル 10 も SDK とともにローカルにインストールされます。以下の場所にあります。 tutorials/10-haply-inverse-events/ サービスのインストールディレクトリ内。

出典: Python·C++·C++ Glaze

関連トピック: イベントと監視·WebSocketプロトコル