3个版本
0.1.2 | 2022年4月26日 |
---|---|
0.1.1 | 2022年2月16日 |
0.1.0 | 2022年2月15日 |
#26 in #流量
57KB
1K SLoC
pdc-core
pdc-core 是一个库,它提供了对高性能负载测试原语的高效访问。
pdc-core
通过 TrafficGenerator
和 Scenario
特性公开了大部分功能。一个 TrafficGenerator
做的事情如其名称所示,它生成某种类型的网络流量。 TrafficGenerator
有两种不同的模式:跟踪负载曲线或最大流量(喷泉)。生成器不一定要发送HTTP流量。负载数据通过 crossbeam
通道公开。
Scenario
的任务相当简单。给定一个经过的时间 T(毫秒),一个 Scenario
应该生成一个目标速率 R(请求/秒)。
pdc-core
通过如 ReqwestGenerator
和 exponentialScenario
等便捷实现提供开箱即用的功能。
use pdc_core::generator::reqwest_generator::ReqwestGenerator;
use pdc_core::generator::TrafficGenerator;
use pdc_core::scenario::ConstantScenario;
use reqwest;
use std::str::FromStr;
use std::thread;
// generate 10000 packets per second for 100000 ms (100 sec)
let scene = ConstantScenario {
rate: 10000.,
duration: 100000,
};
let max_tcp_connections = 300;
let warmup = true;
let method = reqwest::Method::from_str("GET").unwrap();
let req = reqwest::Request::new(
method,
reqwest::Url::from_str("http://127.0.0.1:8080").unwrap(),
);
// Create a generator backed by reqwest
let mut generator = ReqwestGenerator::new(scene, max_tcp_connections, warmup, req);
// Create a Reciever to get data while the generator is running
let num_sent = generator.get_sent_packets_channel();
thread::spawn(move || {
generator.run_scenario();
});
// Continuesly print out the number of packets sent.
loop {
if let Ok(n) = num_sent.try_recv() {
println!("{}", n);
} else {
thread::sleep(std::time::Duration::from_millis(100));
}
}
依赖关系
~13–28MB
~443K SLoC