본문으로 이동

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(없음)(전체, 반복 가능) 패턴에 해당하는 이벤트만 표시
-x, --exclude(없음)해당 패턴(glob, 반복 가능)에 해당하는 이벤트 숨기기
--no-hide-ratefalse이벤트 포함 system-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 페이로드 (구조는 이벤트에 따라 다름)

전체 행사 목록: 행사 및 모니터링.

발송 / 수신​

수동형 구독 — 단독 recv() 사용되며, 아무것도 반환되지 않습니다. 세 가지 변형은 모두 동일한 필터링 파이프라인을 구현하며, 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 프로토콜