メインコンテンツへ移動

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

に接続する イベント一覧 (ポート 10020) システムイベントを表示し、レベル、名前のパターン、除外条件によるフィルタリングを任意で設定できます。読み取り専用 — セッションプロファイルは作成されず、コマンドも送信されません。

学習内容:

  • 購読する WebSocketイベント (ポート 10020) 受動的な観察者として
  • 分析する JSONイベント — level, name, category, data, message
  • 深刻度の最低レベルでフィルタリングする
  • ワイルドカードによる名前の照合と除外
  • このチュートリアルを使用して、他のどのチュートリアルと並行してでも、制御ループの性能を評価してください

進行​

  1. CLI オプションを分析する (--level, --name, --exclude, --no-hide-rate, --port).
  2. ログイン ws://localhost:10020 (le イベント一覧) — 読み取り専用のオブザーバーであるため、セッションプロファイルは送信されません。
  3. 受信する各メッセージについて、JSONイベントを解析し、フィルタを適用します:
    • 以下の場合はメッセージを無視してください level は、最小の重症度レベルを下回っている。
    • もし理由があるなら --name が提供されている場合は、そのいずれかに一致する場合を除き、そのメッセージを無視してください( name 一人で、または category/name).
    • もしある理由があれば --exclude 対応する、メッセージを却下する。
  4. 選択されたイベントを、そのレベル、完全な名前、オプションのメッセージ、およびペイロードとともに表示する data 通性。

パラメータ​

オプションデフォルト値役割
--port10020イベント・ポート・デュ・カナル
-l, --levelinfo最小重み — 価値観の一つ info, notice, warning, error, critical, panic
-n, --name(なし)(glob、繰り返し可能)というパターンに一致するイベントのみを表示する
-x, --exclude(なし)(glob、繰り返し可能)というパターンに一致するイベントを非表示にする
--no-hide-ratefalseイベントを含める system-rate-report (デフォルトでは非表示になっています。コメントが非常に多いからです)
制御ループの性能評価

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

よく読まれている記事​

受信する各メッセージは、1つのイベントに対応します:

  • level — チェーン状の重み(info ... panic)
  • name — イベント名(例: device-connected, system-rate-report)
  • category — カテゴリ(例: device, session, system)
  • message — 任意の可読文字列
  • data — オプションのネストされたJSONペイロード(構造はイベントによって異なります)

イベントの完全な一覧:イベントと監視。

送信/受信​

パッシブ・サブスクリプション — 単独 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プロトコル