1个不稳定版本

0.1.0 2021年2月1日

#16#constrained

每月35次下载
用于 remux

Apache-2.0 OR MIT

19KB
298

受限连接

模拟受限网络连接。

可用于对建立在面向流连接(例如TCP)之上的网络逻辑进行基准测试。通过指定其带宽以及往返时间(延迟)来创建连接。连接将延迟每个字节的块,并允许最多 带宽-延迟积 字节数在 线上 强制背压。

let msg = vec![0; 10 * 1024 * 1024];
let msg_clone = msg.clone();
let start = Instant::now();
let mut pool = futures::executor::LocalPool::new();

let bandwidth = 1_000_000_000;
let rtt = Duration::from_micros(100);
let (mut a, mut b) = Connection::new_constrained(bandwidth, rtt);

pool.spawner().spawn_obj(async move {
    a.write_all(&msg_clone).await.unwrap();
}.boxed().into()).unwrap();

pool.run_until(async {
    let mut received_msg = Vec::new();
    b.read_to_end(&mut received_msg).await.unwrap();

    assert_eq!(msg, received_msg);
});

let duration = start.elapsed();

println!(
    "Bandwidth {} KiB/s, RTT {:.5} s, Payload length {} KiB, duration {:.5} s",
    bandwidth / 1024, rtt.as_secs_f64(), msg.len() / 1024, duration.as_secs_f64(),
);

目前,由于库未进行适当的优化,您无法模拟高速网络。运行 examples/accuracy.rs 二进制文件以获取详细信息。

$ cargo run --example accuracy --release

Name                            Bandwidth       RTT             Payload         Duration        Acurracy
Satellite Network               500 KiB/s       0.90000 s       10240 KiB       164.49 s        1.00 %
Residential DSL                 1953 KiB/s      0.05000 s       10240 KiB       42.97 s         1.02 %
Mobile HSDPA                    5859 KiB/s      0.10000 s       10240 KiB       14.19 s         1.01 %
Residential ADSL2+              19531 KiB/s     0.05000 s       10240 KiB       4.33 s          1.03 %
Residential Cable Internet      195312 KiB/s    0.02000 s       10240 KiB       0.46 s          1.07 %
GBit LAN                        976562 KiB/s    0.00010 s       10240 KiB       0.26 s          3.16 %
High Speed Terrestiral Net      976562 KiB/s    0.00100 s       10240 KiB       0.13 s          1.56 %
Ultra High Speed LAN            97656250 KiB/s  0.00003 s       10240 KiB       0.01 s          16.08 %

许可证:Apache-2.0 OR MIT

依赖项

~1MB
~16K SLoC