socketioxide 0.18.3

Socket IO server implementation in rust as a Tower Service.
Documentation
use criterion::{BatchSize, Criterion, black_box, criterion_group, criterion_main};
use rand::Rng;
use socketioxide::extensions::Extensions;

fn bench_extensions(c: &mut Criterion) {
    let i = black_box(5i32);
    let mut group = c.benchmark_group("extensions");
    group.bench_function("concurrent_inserts", |b| {
        let ext = Extensions::new();
        b.iter(|| {
            ext.insert(i);
        });
    });
    group.bench_function("concurrent_get", |b| {
        let ext = Extensions::new();
        ext.insert(i);
        b.iter(|| {
            ext.get::<i32>();
        })
    });
    group.bench_function("concurrent_get_inserts", |b| {
        let ext = Extensions::new();
        b.iter_batched(
            || rand::rng().random_range(0..3),
            |i| {
                if i == 0 {
                    ext.insert(i);
                } else {
                    ext.get::<i32>();
                }
            },
            BatchSize::SmallInput,
        )
    });
    group.finish();
}

criterion_group!(benches, bench_extensions);
criterion_main!(benches);