Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

rb_zenoh

rb_zenoh는 Zenoh 기반의 공통 통신 패키지입니다. 주요 기능은 publish/subscribe, query/queryable, ZenohRouter 데코레이터 라우팅입니다.

설치/의존성

  • Python: >=3.12,<3.13
  • 패키지 의존성: flatbuffers, psutil, rb_utils, rb_modules
  • _core native extension은 패키지 설치 중 빌드하지 않습니다. 필요 플랫폼용 _core*.so/_core*.pyd를 먼저 생성한 뒤 패키지에 포함합니다.
# 현재 host용
bash scripts/backend/build_cpp_core.sh zenoh

# Docker/Linux용
RB_CPP_CORE_TARGETS="linux/amd64 linux/arm64" bash scripts/backend/build_cpp_core.sh zenoh

배포용 rainbow-rb-zenoh은 fat wheel을 만들지 않고 플랫폼별 wheel로 분리합니다. 각 wheel에는 해당 플랫폼의 _core artifact 하나만 포함됩니다.

핵심 객체

  • ZenohClient: 저수준 통신 API
  • ZenohRouter: 데코레이터 기반 라우터
  • SubscribeOptions: subscribe 동작 옵션

1) publish

from rb_zenoh.client import ZenohClient

client = ZenohClient()
client.publish("muscat/sample/topic", payload={"ok": True})

FlatBuffer 요청 publish:

from rb_flat_buffers.IPC.Request_MotionPause import Request_MotionPauseT

req = Request_MotionPauseT()
client.publish(
    "C500920/call_pause",
    flatbuffer_req_obj=req,
    flatbuffer_buf_size=64,
)

2) subscribe

from rb_zenoh.client import ZenohClient
from rb_zenoh.schema import SubscribeOptions

client = ZenohClient()

async def on_msg(*, topic, mv, obj_payload, dict_payload, attachment):
    print(topic, obj_payload, dict_payload, attachment)

client.subscribe(
    "muscat/sample/topic",
    on_msg,
    options=SubscribeOptions(dispatch="immediate"),
)

콜백 시그니처:

  • topic: topic 문자열
  • mv: raw payload(memoryview)
  • obj_payload: flatbuffer_obj_t=<FlatBuffer T class> 파싱 객체 (T | None)
  • dict_payload: flatbuffer_obj_t 유무와 무관하게 dict 변환 결과 (dict | None)
  • attachment: sender, sender_id 정보

3) queryable

def on_query(req=None, params=None):
    return {"status": "ok"}

client.queryable("muscat/sample/query", on_query)

콜백 인자 의미:

  • req: query payload 본문
    • flatbuffer_req_t/flatbuffer_req_T_class를 지정한 경우에만 주입됩니다.
    • 내부에서 InitFromPackedBuf(...)로 파싱한 FlatBuffer ...T 객체입니다.
    • 요청 payload가 없는데 flatbuffer_req_t를 지정하면 에러가 발생합니다.
  • params: query parameter
    • 내부 q.parameters 값을 dict[str, str] 형태로 주입합니다.
    • payload(req)와 별도로 필터/옵션 전달에 사용합니다.

주의사항:

  • 콜백 파라미터 이름이 정확히 req, params일 때만 자동 주입됩니다.
  • request, query_params 같은 다른 이름으로 선언하면 주입되지 않습니다.
  • 둘 다 선언하지 않으면 인자 없이 호출됩니다.

4) query_one / query_all

query_one

res = client.query_one("muscat/program/state", timeout=0.3)
print(res.get("dict_payload"))
  • 첫 응답 1개만 반환
  • 응답이 없으면 ZenohNoReply 예외

query_all

res_list = client.query_all("*/health", timeout=0.5)
for item in res_list:
    print(item.get("key"), item.get("dict_payload"))
  • timeout 내 도착한 응답을 모두 list로 반환
  • 응답이 없어도 빈 리스트 반환

언제 무엇을 쓸지

  • 단일 대상 호출: query_one
  • 와일드카드/다중 서비스 수집: query_all

FlatBuffer 파라미터 상세

flatbuffer_req_obj

  • 의미: 요청으로 보낼 FlatBuffer 객체(Pack() 가능한 객체)
  • 사용 위치: publish, query_one, query_all
  • 내부 동작: builder로 pack 후 bytes payload 전송

flatbuffer_buf_size

  • 의미: FlatBuffer 직렬화 builder 초기 버퍼 크기
  • 사용 위치:
    • 요청 직렬화: publish, query_one, query_all
    • queryable 응답 직렬화: queryable(..., flatbuffer_res_buf_size=...)
  • 너무 작으면 직렬화 실패 가능
  • 권장: 64/128/256/512부터 시작해 payload 크기에 맞게 상향

flatbuffer_res_T_class

  • 의미: 응답 payload를 어떤 FlatBuffer 타입으로 파싱할지 지정
  • 사용 위치: query_one, query_all
  • 타입: FlatBuffer Object API 클래스(T 클래스) 를 넘겨야 함
    • 예: Response_FunctionsT, State_CoreT
    • 보통 이름이 ...T로 끝나는 클래스
    • 내부적으로 InitFromPackedBuf(...)를 통해 파싱됨
  • 결과:
    • 지정 시: obj_payload에 파싱 객체
    • 미지정 시: dict_payload/raw payload 중심 사용

예시:

from rb_flat_buffers.IPC.Request_MotionPause import Request_MotionPauseT
from rb_flat_buffers.IPC.Response_Functions import Response_FunctionsT

res = client.query_one(
    "C500920/call_pause",
    flatbuffer_req_obj=Request_MotionPauseT(),
    flatbuffer_res_T_class=Response_FunctionsT,
    flatbuffer_buf_size=64,
    timeout=0.3,
)
obj = res.get("obj_payload")

5) ZenohRouter 사용

from rb_zenoh.router import ZenohRouter

router = ZenohRouter(prefix="muscat/common")

@router.subscribe("health")
async def on_health(*, topic, obj_payload, dict_payload, attachment):
    pass

@router.queryable("echo")
async def on_echo(params=None):
    return {"ok": True}

라이프사이클:

  • 시작 시 await router.startup()
  • 종료 시 await router.shutdown()

예외/주의사항

  • query_one no-reply: ZenohNoReply
  • transport 재연결 계열: ZenohTransportError
  • ZenohClient는 프로세스 단위 싱글톤이므로 불필요한 잦은 close() 호출은 피하는 것을 권장

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

rainbow_rb_zenoh-0.0.73.dev1-cp313-cp313-manylinux_2_28_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

rainbow_rb_zenoh-0.0.73.dev1-cp313-cp313-manylinux_2_28_aarch64.whl (5.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

rainbow_rb_zenoh-0.0.73.dev1-cp312-cp312-manylinux_2_28_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

rainbow_rb_zenoh-0.0.73.dev1-cp312-cp312-manylinux_2_28_aarch64.whl (5.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

rainbow_rb_zenoh-0.0.73.dev1-cp311-cp311-manylinux_2_28_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

rainbow_rb_zenoh-0.0.73.dev1-cp311-cp311-manylinux_2_28_aarch64.whl (5.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

File details

Details for the file rainbow_rb_zenoh-0.0.73.dev1-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rainbow_rb_zenoh-0.0.73.dev1-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1121b66300a19f945f9aa16c2a6b3bfac5d987127f684529fe4c91901110a114
MD5 871ec41ce3713c54605775a132318f37
BLAKE2b-256 0b111c1a77d87569ad893f91bda5cc506d859f0d19839e25772fe8903023a846

See more details on using hashes here.

File details

Details for the file rainbow_rb_zenoh-0.0.73.dev1-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rainbow_rb_zenoh-0.0.73.dev1-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2a1af9f18bb3e4a6b51a8148ee1ecb35ff79ddf27248b5811d1a3c3cee0a5cd7
MD5 ffc91159bc49c1d6556eec6697c1af11
BLAKE2b-256 92f4acd7fc64c4694d12e0376dd279c7f70cd9c6211ee2042f980d33950a883d

See more details on using hashes here.

File details

Details for the file rainbow_rb_zenoh-0.0.73.dev1-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rainbow_rb_zenoh-0.0.73.dev1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 412bb57777d8c036a70a5b840aa84e73695427078407e0d0c85a9c8fab96e7cb
MD5 a0f11949c38c0870acc9cdb5dbe2d1ec
BLAKE2b-256 a24a4852ca935bd2538c00700e388dce4d4b11c8eab54257c8cfc70d2a43999a

See more details on using hashes here.

File details

Details for the file rainbow_rb_zenoh-0.0.73.dev1-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rainbow_rb_zenoh-0.0.73.dev1-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 34260b96d1ab78c8bee753ee6d03598993530f89532fecb770bd605c28cbf9a2
MD5 b2ccf1063fd929b0e4c4e4d13f3e0492
BLAKE2b-256 7eda6877a44b0fea0beeee5e73bdafbb66b664e6348fb04af4a50f8218782648

See more details on using hashes here.

File details

Details for the file rainbow_rb_zenoh-0.0.73.dev1-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rainbow_rb_zenoh-0.0.73.dev1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 22c85b16467371042b0dcd66084ac6f01ae7576634dfce5836caa0f40794b6f3
MD5 8c154b4e5e1406b3a5d596125bb74c0f
BLAKE2b-256 de26dcc472687ff77f0b7ea7e0412e33f95bed32e414043693d26917b7a0df0e

See more details on using hashes here.

File details

Details for the file rainbow_rb_zenoh-0.0.73.dev1-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rainbow_rb_zenoh-0.0.73.dev1-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 930ff8f5bf44d8f5ad3faa1c69e7515627e25c63ce29979e5ebe0a855898e3d5
MD5 3a27b671d1c3a49f0f5fbd12d3fbf801
BLAKE2b-256 e3baa7d7d87e1692e327c2ce4dcf11debc0654bc7f9b925107e66aa604e8f454

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.1

6 files

0.1.0

6 files

0.0.79

6 files

0.0.78

6 files

0.0.77

6 files

0.0.76

6 files

0.0.75

6 files

0.0.74

6 files

0.0.73

6 files

This release

0.0.73.dev1 This release

6 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page