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
- POST
/RMBTControlServer/settings→ register client, receive UUID - POST
/RMBTControlServer/testRequest→ receive token, server address, thread count - Pre-test: 2-second single-thread GETCHUNKS download to determine chunk size and thread counts
- Ping: 1 s / 10–100 pings
- Download: multi-threaded GETTIME, all threads start simultaneously via
threading.Barrier - Upload: multi-threaded PUTNORESULT
- 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef8153fe322cc500f5d078a8233b8c9a2636347cb783324b3dc2313a1da36d88
|
|
| MD5 |
66a3512566478b9e7b8ad63c38c45937
|
|
| BLAKE2b-256 |
6631fabf1a3c0d73fbccc24cb54aaaa14613977f368cf39791100b23dfe86c92
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rmbt_client-1.1.1.tar.gz -
Subject digest:
ef8153fe322cc500f5d078a8233b8c9a2636347cb783324b3dc2313a1da36d88 - Sigstore transparency entry: 1930941251
- Sigstore integration time:
-
Permalink:
raaaimund/open-rmbt-client-cli@337968e3830f857532e68ba459c2771dc82d0f61 -
Branch / Tag:
refs/tags/python-v1.1.1 - Owner: https://github.com/raaaimund
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@337968e3830f857532e68ba459c2771dc82d0f61 -
Trigger Event:
push
-
Statement type:
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
- Download URL: rmbt_client-1.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 35.0 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f34aa130699305d0fe08b31c60c88e8a9238927d45803942b42b493e1b18766
|
|
| MD5 |
7c6d50425f0496da35ebb25509bc5d85
|
|
| BLAKE2b-256 |
160c8bb9a5ce680790c99bcc349d70769b46c7b1b147cb57cd0822c43a9531d3
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rmbt_client-1.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
4f34aa130699305d0fe08b31c60c88e8a9238927d45803942b42b493e1b18766 - Sigstore transparency entry: 1930941406
- Sigstore integration time:
-
Permalink:
raaaimund/open-rmbt-client-cli@337968e3830f857532e68ba459c2771dc82d0f61 -
Branch / Tag:
refs/tags/python-v1.1.1 - Owner: https://github.com/raaaimund
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@337968e3830f857532e68ba459c2771dc82d0f61 -
Trigger Event:
push
-
Statement type:
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
- Download URL: rmbt_client-1.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
- Upload date:
- Size: 38.8 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARMv7l, manylinux: glibc 2.31+ ARMv7l
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa538b4e2466409b2685b941e370d6c42699700d05413161e52ba72266dd63f5
|
|
| MD5 |
7187ff51bed36ece48a82230a600984e
|
|
| BLAKE2b-256 |
500f9d57b43744feadbae81c2d627ce448dc84e1cfb7ca0166237db95d061617
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rmbt_client-1.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl -
Subject digest:
fa538b4e2466409b2685b941e370d6c42699700d05413161e52ba72266dd63f5 - Sigstore transparency entry: 1930941560
- Sigstore integration time:
-
Permalink:
raaaimund/open-rmbt-client-cli@337968e3830f857532e68ba459c2771dc82d0f61 -
Branch / Tag:
refs/tags/python-v1.1.1 - Owner: https://github.com/raaaimund
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@337968e3830f857532e68ba459c2771dc82d0f61 -
Trigger Event:
push
-
Statement type:
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
- Download URL: rmbt_client-1.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 36.5 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7517586d3ad23ae9617d78db0ce691f4d6098995150e9ed6b6b9a549e1fcfaf5
|
|
| MD5 |
e0960db6d6264217cd1970da2468fbb3
|
|
| BLAKE2b-256 |
3746d7ab31c8017f6258603c59f04031a2477a25a90c1d3527b2ff3d22f13c75
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rmbt_client-1.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
7517586d3ad23ae9617d78db0ce691f4d6098995150e9ed6b6b9a549e1fcfaf5 - Sigstore transparency entry: 1930941767
- Sigstore integration time:
-
Permalink:
raaaimund/open-rmbt-client-cli@337968e3830f857532e68ba459c2771dc82d0f61 -
Branch / Tag:
refs/tags/python-v1.1.1 - Owner: https://github.com/raaaimund
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@337968e3830f857532e68ba459c2771dc82d0f61 -
Trigger Event:
push
-
Statement type: