Skip to main content

RMBT network measurement client — performs ping, download, and upload speed tests against an RMBT measurement server

Project description

rmbt-client (Python)

RMBT network measurement client written in Python. Performs ping, download, and upload phases against an RMBT measurement server and submits results to the control server.

Requirements

  • Python 3.7+
  • No third-party dependencies (stdlib only: ssl, socket, threading, urllib)

Usage

python -m rmbt_client --host https://measure.example.com

Run with a specific thread count and duration:

python -m rmbt_client --host https://measure.example.com --threads 4 --duration 10

Skip TLS verification against a local test server:

python -m rmbt_client --host https://localhost:8080 --no-tls-verify

Options

Flag Description
-h, --host URL Control server base URL (required)
-p, --port PORT Override test server port
-u, --uuid UUID Client UUID (uses/creates ~/.rmbt_client_uuid if omitted)
-t, --threads N Force thread count for download and upload (overrides pre-test)
-d, --duration SECS Test duration in seconds (default: from control server)
--ws Use WebSocket (RMBTws) framing instead of plain HTTP upgrade
--http Use plain HTTP upgrade (RMBThttp) — overrides auto-detection
--no-tls-verify Skip TLS certificate verification (insecure)
--debug Print control server request/response JSON
--intermediate Print upload throughput every 40 ms per thread
--help Print help

Performance

Starting with v1.1.0 the download and upload hot loops run inside a small C extension (rmbt_loop) that calls Py_BEGIN_ALLOW_THREADS before entering the tight recv()/send() loop. This releases the GIL for the entire bulk-data phase, allowing all measurement threads to transfer data truly in parallel.

The extension is compiled automatically when the package is installed from source (requires gcc and python3-dev). Pre-built manylinux wheels are published to PyPI for the three architectures Home Assistant runs on:

Architecture Covers
x86_64 NUC, generic x86 VM, Docker on x86
aarch64 Raspberry Pi 4 / 5, modern ARM boards (64-bit)
armv7l Raspberry Pi 3 and older (32-bit)

When the extension is not available (e.g. unsupported platform, missing compiler) the client falls back silently to the pure-Python implementation.

Measured throughput

The numbers below are from a loopback test (127.0.0.1, 4 threads, 7 s) on an x86-64 machine. They reflect CPU throughput, not a real network:

Client Download Upload
Python 1.1.0 (C extension, loopback) ~94 Gbit/s ~68 Gbit/s
Python 1.0.0 (pure Python, loopback) ~8 Gbit/s ~6 Gbit/s
Rust (loopback) ~32 Gbit/s ~32 Gbit/s

No test on a real 100 Gbit/s network has been performed. On an actual high-speed link, factors such as NIC driver overhead, interrupt coalescing, and kernel socket buffer tuning will dominate long before the Python vs. C difference matters. For typical home and office connections (up to ~10 Gbit/s) either implementation is more than fast enough.

To force the pure-Python path for benchmarking or debugging:

RMBT_PURE_PYTHON=1 python -m rmbt_client --host https://measure.example.com

Protocol

  1. POST /RMBTControlServer/settings → register client, receive UUID
  2. POST /RMBTControlServer/testRequest → receive token, server address, thread count
  3. Pre-test: 2-second single-thread GETCHUNKS download to determine chunk size and thread counts
  4. Ping: 1 s / 10–100 pings
  5. Download: multi-threaded GETTIME, all threads start simultaneously via threading.Barrier
  6. Upload: multi-threaded PUTNORESULT
  7. POST /RMBTControlServer/result

Supports both RMBThttp (plain HTTP upgrade) and RMBTws (WebSocket) variants.
TLS via the stdlib ssl module; control server HTTPS via urllib.request.

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

rmbt_client-1.1.1.tar.gz (17.4 kB view details)

Uploaded Source

Built Distributions

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

rmbt_client-1.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (35.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

rmbt_client-1.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl (38.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARMv7lmanylinux: glibc 2.31+ ARMv7l

rmbt_client-1.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (36.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

File details

Details for the file rmbt_client-1.1.1.tar.gz.

File metadata

  • Download URL: rmbt_client-1.1.1.tar.gz
  • Upload date:
  • Size: 17.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rmbt_client-1.1.1.tar.gz
Algorithm Hash digest
SHA256 ef8153fe322cc500f5d078a8233b8c9a2636347cb783324b3dc2313a1da36d88
MD5 66a3512566478b9e7b8ad63c38c45937
BLAKE2b-256 6631fabf1a3c0d73fbccc24cb54aaaa14613977f368cf39791100b23dfe86c92

See more details on using hashes here.

Provenance

The following attestation bundles were made for rmbt_client-1.1.1.tar.gz:

Publisher: publish-python.yml on raaaimund/open-rmbt-client-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rmbt_client-1.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rmbt_client-1.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4f34aa130699305d0fe08b31c60c88e8a9238927d45803942b42b493e1b18766
MD5 7c6d50425f0496da35ebb25509bc5d85
BLAKE2b-256 160c8bb9a5ce680790c99bcc349d70769b46c7b1b147cb57cd0822c43a9531d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for rmbt_client-1.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish-python.yml on raaaimund/open-rmbt-client-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rmbt_client-1.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for rmbt_client-1.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 fa538b4e2466409b2685b941e370d6c42699700d05413161e52ba72266dd63f5
MD5 7187ff51bed36ece48a82230a600984e
BLAKE2b-256 500f9d57b43744feadbae81c2d627ce448dc84e1cfb7ca0166237db95d061617

See more details on using hashes here.

Provenance

The following attestation bundles were made for rmbt_client-1.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl:

Publisher: publish-python.yml on raaaimund/open-rmbt-client-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rmbt_client-1.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rmbt_client-1.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7517586d3ad23ae9617d78db0ce691f4d6098995150e9ed6b6b9a549e1fcfaf5
MD5 e0960db6d6264217cd1970da2468fbb3
BLAKE2b-256 3746d7ab31c8017f6258603c59f04031a2477a25a90c1d3527b2ff3d22f13c75

See more details on using hashes here.

Provenance

The following attestation bundles were made for rmbt_client-1.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish-python.yml on raaaimund/open-rmbt-client-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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