#local-server #bandwidth #latency #limitation #networking #simulation

bin+lib yocalhost

一个模拟延迟和带宽限制的 HTTP 开发服务器

6 个版本 (破坏性)

0.5.0 2024 年 8 月 10 日
0.4.1 2023 年 12 月 1 日
0.4.0 2023 年 11 月 16 日
0.3.0 2023 年 9 月 15 日
0.1.0 2023 年 9 月 4 日

#233 in HTTP 服务器

Download history 105/week @ 2024-04-29 3/week @ 2024-05-27 20/week @ 2024-07-15 28/week @ 2024-07-29 107/week @ 2024-08-05

每月 155 次下载
用于 2 crates

MIT/Apache

23KB
447

localhost 太快了吗?试试 yocalhost。

yocalhost 是一个模拟延迟和带宽限制的 HTTP 开发服务器。

它支持范围请求,并将带宽限制应用于所有并发连接。

动机

与延迟和带宽不切实际的快速的本机 localhost 服务器相比,评估几乎无法告诉你你的网络访问在现实世界中的表现。

将网络客户端与远程主机进行比较受整个互联网的任意性影响。特别是如果你的客户端涉及许多请求,可能难以获得一致的测量结果。

使用 yocalhost,你可以运行本地的 http 服务器,但指定人工带宽和延迟限制。这允许你以可重复的方式测量延迟和带宽对你代码的实时影响。

安装 yocalhost 开发服务器 CLI

假设你已经安装了 rust 和 cargo,你可以使用以下命令安装 yocalhost:

cargo安装 yocalhost

然后开始使用

cd your_web_root

yocalhost

# Start on port 8888, simulating a 100 megabit connection with 50ms latency
yocalhost -p 8888 -b "100Mbit" -l 50

# See other options
yocalhost --help

在您的自动化 Rust 基准测试中使用 yocalhost 的 ThrottledServer

// e.g. in a criterion benchmark

use yocalhost::ThrottledServer;

let port = 8888;
let latency_ms = 50;
let bytes_per_second = 100_000_000 / 8;
let web_root = "../../test/data";

let server = ThrottledServer::new(port, latency_ms, bytes_per_second, web_root);
    
let runtime = tokio::runtime::Runtime::new().unwrap(); : Runtime    
runtime.spawn(async move {
    server.serve().await;
});

c.bench_function("my network test", |b| {
    b.to_async(runtime).iter(|| {
        do_some_work(format!("https://127.0.0.1:{port}")
    })
})

依赖项

~8–16MB
~215K SLoC