Skip to main content

Roboflex Transport Zenoh Library

Project description

roboflex.transport.zenoh

Roboflex transport nodes powered by Zenoh. Zenoh gives us pub/sub plus automatic discovery, so we can move roboflex messages across threads, processes, and machines without needing to manage a broker manually.

any node -> ZenohPublisher ==THE_NETWORK==> ZenohSubscriber -> any node

Status

This transport mirrors the ZMQ/MQTT bindings but uses zenoh-c under the hood, with Zenoh discovery/scouting enabled by default. Nodes:

  • ZenohPublisher: publishes raw roboflex messages to a Zenoh key expression.
  • ZenohSubscriber: subscribes to a key expression and signals incoming messages. It runs its own thread (call start()).
  • ZenohRequestClient: sends one roboflex message as a Zenoh query payload and blocks for a reply.
  • ZenohRequestServer: declares a Zenoh queryable and replies with handler-returned roboflex messages.

Build (C++)

mkdir build && cd build
cmake ..
make

Python bindings are off by default for plain C++ CMake builds. To build them with CMake directly:

cmake -S . -B build -DBUILD_ROBOFLEX_TRANSPORT_ZENOH_PYTHON_EXT=ON

Run Tests

Tests are plain C++ executables registered with CTest; no separate testing library is required.

cmake -S . -B build
cmake --build build --target test_zenoh_transport
ctest --test-dir build --output-on-failure

If Zenoh cannot open a local session in the current environment, the runtime test exits with CTest's configured skip code instead of failing the build.

Example

See examples/pub_sub_0_cpp.cpp for a simple publisher/subscriber wiring:

auto session = transportzenoh::MakeZenohSession();
transportzenoh::ZenohPublisher pub(session, "roboflex/demo");
transportzenoh::ZenohSubscriber sub(session, "roboflex/demo");
sub.start();

examples/pub_sub_config_cpp.cpp shows a more explicit setup: setting mode/explicit endpoints, turning off multicast scouting, using express/priority publisher settings, and allowing any origin on the subscriber.

Python

Python bindings mirror the C++ API (ZenohSession, ZenohPublisher, ZenohSubscriber). Build via pip install . from the repo root after building the C++ library, like the other transport packages.

RPC / Request-Reply

For request-response workloads, use ZenohRequestClient and ZenohRequestServer instead of pub/sub. These are built on Zenoh query/queryable semantics.

auto session = transportzenoh::MakeZenohSession();

auto server = std::make_shared<transportzenoh::ZenohRequestServer>(
    session,
    "roboflex/rpc",
    "ZenohRequestServer",
    [](core::MessagePtr request) {
        return request;
    });
server->start();

transportzenoh::ZenohRequestClient client(
    session,
    "roboflex/rpc",
    "ZenohRequestClient",
    1000);

auto reply = client.call(request_message, 1000);

ZenohRequestClient is also a node: when it receives a message, it performs a blocking query and signals the first successful reply downstream.

Configuration knobs

  • ZenohSession: accepts an optional config_json (JSON/JSON5 matching the Zenoh config schema), explicit mode (peer, client, router), connect_endpoints, listen_endpoints, and enable_multicast_scouting toggle.
  • ZenohPublisher: opts for express (no batching), priority, and allowed_destination (see zc_locality_t).
  • ZenohSubscriber: accepts allowed_origin (also zc_locality_t).
  • ZenohRequestClient: accepts query target, express, priority, allowed_destination, and timeout.
  • ZenohRequestServer: accepts allowed_origin and queryable completeness.
  • Key expressions follow Zenoh’s rules and support wildcards; see Zenoh key expressions.

System Dependencies

None beyond what the build pulls automatically: roboflex_core and zenoh-c are fetched via CMake FetchContent.

Project details


Download files

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

Source Distribution

roboflex_transport_zenoh-0.1.4.tar.gz (15.4 kB view details)

Uploaded Source

Built Distribution

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

roboflex_transport_zenoh-0.1.4-cp311-cp311-macosx_15_0_arm64.whl (4.9 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

File details

Details for the file roboflex_transport_zenoh-0.1.4.tar.gz.

File metadata

File hashes

Hashes for roboflex_transport_zenoh-0.1.4.tar.gz
Algorithm Hash digest
SHA256 90bca3760d7b972b774480c25c3b4852a9b09756df2e1e09e476996d736161b6
MD5 fe5154700b32a4d4565b250af3c36b8b
BLAKE2b-256 576c3087cfab2219cb6464d57d217b7f5f02ce0fa415d3ef2c85169797ce4115

See more details on using hashes here.

File details

Details for the file roboflex_transport_zenoh-0.1.4-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for roboflex_transport_zenoh-0.1.4-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 53de7d144f9d863ef847306811952b06b93d9bbc2e1b9aee1361d51aad179709
MD5 b8b9460d9cc0c53f43ad42756e9fdced
BLAKE2b-256 05a476c4873515db0f5725337260530ec143cf038eba83a3701a290fcbf7ebce

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page