hydra-sync is a super light-weight e2e reusable multipurpose SPMC cluster network abstraction, which try to focus on fast & reliable data broadcasting, with minimal memory usage, latency and maximum throughput.
Features:
- Backpressure with proper
Head of line blockingprevention - Cheap-copy broadcast to multiple consumers
- AES-GCM 256 encryption for secure communication
- Fearlessly concurrent session for large number of clients
- Cross-lang client net protocol (e.g. C++, Python, Go, etc.)
Example:
use hydra_sync::client::{HydraClient, Producer, Consumer};
use hydra_sync::server::HydraServer;
use std::net::SocketAddr;
use anyhow::Result;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let (server_handle, server_addr) = HydraServer::bind_default().await?; // bind to os-assigned port
let session_id = [0xFFu8; 64];
let session_key = [0xAAu8; 32];
tokio::spawn(async move { let _ = server_handle.run().await; }); // run in background
// Producer; sends data to all consumers in the session
let mut producer =
HydraClient::<Producer>::connect(server_addr, &session_id, session_key).await?;
producer.broadcast(b"please date me").await?;
// Consumer; receives and decrypts frames from the producer
let mut consumer =
HydraClient::<Consumer>::connect(server_addr, &session_id, session_key).await?;
loop {
let data = consumer.recv().await?;
println!("Received {} bytes: {:?}", data.len(), data);
// `data` borrows from `consumer`'s internal memory pool and is
// only valid until the next `recv()` call.
// Copy it out (e.g. `data.to_vec()`) if you need to keep it longer.
break;
}
// clean FIN shutdown
producer.close().await?;
consumer.close().await?;
Ok(())
}References: https://rigtorp.se/ringbuffer/
Benchmark:
# run `cargo bench --bench channel`
hydra-sync 'channel' bench | 6 warmup + 14 rounds x 5000000 ops | cpus=24
push/64B/cap1024 [ 260.76ms 264.16ms 264.22ms 265.33ms 265.78ms 266.67ms 267.36ms 268.64ms 269.96ms 272.20ms 275.08ms 278.35ms 287.51ms 291.71ms]
median: 53.73 ns/op | 18.61 M ops/sec
push/256B/cap1024 [ 260.49ms 262.39ms 263.43ms 267.10ms 267.56ms 267.83ms 269.37ms 270.30ms 278.08ms 278.31ms 284.73ms 288.94ms 338.92ms 349.09ms]
median: 54.06 ns/op | 18.50 M ops/sec
push_batch_64/64B/cap1024 [ 145.85ms 146.64ms 146.83ms 147.97ms 148.40ms 149.29ms 150.33ms 151.65ms 152.50ms 152.61ms 153.39ms 153.47ms 154.29ms 166.93ms]
median: 30.33 ns/op | 32.97 M ops/sec
push_batch_256/64B/cap1024 [ 133.19ms 134.13ms 136.05ms 136.59ms 137.52ms 138.58ms 139.16ms 139.95ms 141.01ms 141.08ms 142.49ms 145.03ms 145.23ms 147.76ms]
median: 27.99 ns/op | 35.73 M ops/sec
payload sweep (single, cap 1024)
payload_256B [ 261.63ms 262.25ms 264.16ms 264.29ms 264.81ms 265.10ms 265.28ms 266.26ms 266.37ms 266.75ms 271.34ms 272.09ms 285.21ms 291.71ms]
median: 53.25 ns/op | 18.78 M ops/sec
payload_1024B [ 266.03ms 269.94ms 270.84ms 271.76ms 272.02ms 272.29ms 274.26ms 274.52ms 274.84ms 274.89ms 277.44ms 278.16ms 280.02ms 281.48ms]
median: 54.90 ns/op | 18.21 M ops/sec
payload_4096B [ 258.64ms 259.45ms 261.92ms 263.85ms 264.67ms 268.01ms 270.51ms 271.46ms 273.81ms 274.41ms 275.93ms 294.33ms 295.86ms 298.30ms]
median: 54.29 ns/op | 18.42 M ops/sec
payload_65536B [ 256.27ms 260.78ms 260.99ms 265.13ms 266.55ms 266.57ms 267.23ms 270.93ms 274.80ms 288.58ms 291.21ms 291.38ms 294.10ms 304.19ms]
median: 54.19 ns/op | 18.45 M ops/sec
capacity sweep (single, 64B)
cap_256 [ 177.60ms 264.81ms 264.96ms 266.60ms 269.35ms 272.02ms 272.38ms 273.40ms 277.12ms 279.00ms 279.20ms 279.89ms 296.04ms 348.95ms]
median: 54.68 ns/op | 18.29 M ops/sec
cap_1024 [ 249.28ms 261.64ms 262.95ms 264.07ms 266.27ms 267.99ms 271.44ms 272.02ms 274.30ms 274.99ms 278.01ms 292.39ms 293.32ms 298.06ms]
median: 54.40 ns/op | 18.38 M ops/sec
cap_4096 [ 109.93ms 305.82ms 310.89ms 315.60ms 317.21ms 319.02ms 319.80ms 320.81ms 322.98ms 325.48ms 365.66ms 373.33ms 376.52ms 380.98ms]
median: 64.16 ns/op | 15.59 M ops/sec
cap_65536 [ 282.62ms 289.95ms 290.61ms 293.41ms 294.87ms 298.59ms 299.74ms 302.55ms 307.07ms 316.11ms 327.74ms 331.42ms 345.37ms 346.06ms]
median: 60.51 ns/op | 16.53 M ops/sec
# last updated on 08/27/2026, rust 1.98.0, i7 14650hx# run `cargo bench --bench server`
hydra-sync 'server' e2e bench | 3 warmup + 8 rounds | 4096 pkts/pass | cpus=24
varying consumers @ 16384B
cons_1 [ 91.1ms 100.2ms 113.7ms 115.9ms 126.3ms 128.8ms 141.0ms 149.4ms]
min 22248.7 ns/pkt ( 0.04 M/s) | med 30846.3 ns/pkt ( 0.03 M/s) | 0.53 GB/s
cons_2 [ 58.7ms 60.0ms 60.1ms 60.3ms 61.6ms 73.1ms 75.5ms 81.5ms]
min 7168.8 ns/pkt ( 0.14 M/s) | med 7520.1 ns/pkt ( 0.13 M/s) | 2.18 GB/s
cons_4 [ 63.8ms 64.2ms 64.4ms 64.5ms 64.9ms 65.3ms 67.3ms 74.2ms]
min 3892.3 ns/pkt ( 0.26 M/s) | med 3958.5 ns/pkt ( 0.25 M/s) | 4.14 GB/s
cons_8 [ 84.0ms 84.5ms 85.7ms 86.6ms 90.3ms 90.9ms 91.0ms 98.4ms]
min 2562.7 ns/pkt ( 0.39 M/s) | med 2755.6 ns/pkt ( 0.36 M/s) | 5.95 GB/s
cons_16 [ 120.0ms 122.4ms 122.9ms 123.1ms 123.6ms 123.9ms 124.9ms 126.6ms]
min 1831.7 ns/pkt ( 0.55 M/s) | med 1886.1 ns/pkt ( 0.53 M/s) | 8.69 GB/s
varying payload @ 4 consumers
payload_256 [ 37.5ms 45.4ms 46.2ms 46.7ms 47.2ms 48.1ms 48.5ms 48.9ms]
min 2289.8 ns/pkt ( 0.44 M/s) | med 2882.9 ns/pkt ( 0.35 M/s) | 0.09 GB/s
payload_1024 [ 36.3ms 38.7ms 44.2ms 46.4ms 47.1ms 48.3ms 50.1ms 54.2ms]
min 2218.0 ns/pkt ( 0.45 M/s) | med 2875.8 ns/pkt ( 0.35 M/s) | 0.36 GB/s
payload_16384 [ 63.2ms 63.9ms 65.3ms 66.1ms 68.5ms 74.9ms 76.5ms 92.1ms]
min 3855.7 ns/pkt ( 0.26 M/s) | med 4180.9 ns/pkt ( 0.24 M/s) | 3.92 GB/s
payload_131072 [ 294.2ms 294.6ms 295.2ms 295.6ms 298.7ms 299.1ms 301.0ms 306.4ms]
min 17958.7 ns/pkt ( 0.06 M/s) | med 18229.5 ns/pkt ( 0.05 M/s) | 7.19 GB/s
payload_1048576 [ 9378.8ms 9601.3ms 9618.2ms 9801.7ms 9812.9ms 9868.6ms 9909.7ms 9917.9ms]
min 572434.9 ns/pkt ( 0.00 M/s) | med 598932.0 ns/pkt ( 0.00 M/s) | 1.75 GB/s
# last updated on 08/27/2026, rust 1.98.0, i7 14650hx