warp app to test multithreading.
This commit is contained in:
commit
fddf995996
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/target
|
||||||
1356
Cargo.lock
generated
Normal file
1356
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
12
Cargo.toml
Normal file
12
Cargo.toml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[package]
|
||||||
|
name = "warptest"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Bill Thiede <git@xinu.tv>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
warp = "0.2.2"
|
||||||
|
tokio = { version = "0.2", features = ["macros"] }
|
||||||
|
stderrlog = "0.4.3"
|
||||||
55
src/main.rs
Normal file
55
src/main.rs
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
//#![deny(warnings)]
|
||||||
|
|
||||||
|
use std::convert::Infallible;
|
||||||
|
use std::str::FromStr;
|
||||||
|
use std::time::{Duration, Instant};
|
||||||
|
|
||||||
|
use warp::Filter;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
// Setup logging
|
||||||
|
stderrlog::new()
|
||||||
|
.verbosity(2)
|
||||||
|
.timestamp(stderrlog::Timestamp::Millisecond)
|
||||||
|
.init()
|
||||||
|
.unwrap();
|
||||||
|
// Match `/sleep/:Seconds`...
|
||||||
|
// and_then create a `Future` that will simply wait N seconds...
|
||||||
|
let sleepy = warp::path("sleep")
|
||||||
|
.and(warp::path::param())
|
||||||
|
.and_then(sleepy);
|
||||||
|
// Match `/spin/:Seconds`... and burn CPU for N seconds...
|
||||||
|
let spin = warp::path("spin").and(warp::path::param()).and_then(spin);
|
||||||
|
let index = warp::any().map(|| {
|
||||||
|
warp::http::Response::builder()
|
||||||
|
.header("content-type", "text/html; charset=utf-8")
|
||||||
|
.body(
|
||||||
|
r#"<!DOCTYPE html><title>warp test</title><body>
|
||||||
|
<div><a href="/spin/5">Spin for 5 seconds</a></div>
|
||||||
|
<div><a href="/sleep/5">Sleep for 5 seconds</a></div>
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
});
|
||||||
|
let routes = sleepy.or(spin).or(index);
|
||||||
|
let routes = routes.with(warp::log("warptest"));
|
||||||
|
|
||||||
|
println!("Listening on :3030");
|
||||||
|
warp::serve(routes).run(([0, 0, 0, 0], 3030)).await;
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn spin(seconds: u64) -> Result<impl warp::Reply, Infallible> {
|
||||||
|
let end = Instant::now() + Duration::new(seconds, 0);
|
||||||
|
let mut cnt = 0;
|
||||||
|
loop {
|
||||||
|
cnt += 1;
|
||||||
|
if Instant::now() > end {
|
||||||
|
return Ok(format!("I spun {} times in {} seconds!", cnt, seconds));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn sleepy(seconds: u64) -> Result<impl warp::Reply, Infallible> {
|
||||||
|
tokio::time::delay_for(Duration::from_secs(seconds)).await;
|
||||||
|
Ok(format!("I waited {} seconds!", seconds))
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user