Voici ma version Rust (je ne suis pas un expert). On a moins de librairies disponible dans le "core", il m'a donc semblé juste d'utiliser des dépendances.
#![deny(warnings)]usestd::convert::Infallible;userand::Rng;usehyper::service::{make_service_fn,service_fn};usehyper::{Body,Method,Request,Response,Server,StatusCode};asyncfnrandom_fox(req: Request<Body>)-> Result<Response<Body>,Infallible>{match(req.method(),req.uri().path()){(&Method::GET,"/")=>{letmutrandomGenerator=rand::thread_rng();letimgCount=20;letrndInt=randomGenerator.gen_range(1..imgCount);letrndStr=rndInt.to_string();leturl="https://avatar.spacefox.fr/Renard-".to_owned()+&rndStr+".png";letset_location=Response::builder().header(hyper::header::LOCATION,url).status(StatusCode::MOVED_PERMANENTLY).body(Body::from("")).unwrap();Ok(set_location)},// Return the 404 Not Found for other routes._=>{letmutnot_found=Response::default();*not_found.status_mut()=StatusCode::NOT_FOUND;Ok(not_found)}}}#[tokio::main]pubasyncfnmain()-> Result<(),Box<dynstd::error::Error+Send+Sync>>{letport=std::env::args().nth(1).expect("no port given").parse::<u16>().unwrap();let_imgCount:u16=std::env::args().nth(2).expect("no imgCount given").parse::<u16>().unwrap();pretty_env_logger::init();letmake_svc=make_service_fn(|_conn|{async{Ok::<_,Infallible>(service_fn(|req|random_fox(req)))}});letaddr=([127,0,0,1],port).into();letserver=Server::bind(&addr).serve(make_svc);println!("Listening on http://{}",addr);server.await?;Ok(())}
Et le Cargo.toml
```ini
[package]
name = "random_url_server"
version = "0.1.0"
edition = "2021"
[dependencies]
hyper = { version = "0.14", features = ["full"] }
tokio = { version = "1", features = ["full"] }
rand = { version = "*"}
pretty_env_logger = "0.4"
```
Sous licence Creative common. Lisez, copiez, modifiez faites en ce que vous voulez.
# Version Rust
Posté par abriotde (site web personnel, Mastodon) . En réponse au journal Java : presque 9 000 requêtes par seconde avec 8 Mo de RAM. Évalué à 4.
Voici ma version Rust (je ne suis pas un expert). On a moins de librairies disponible dans le "core", il m'a donc semblé juste d'utiliser des dépendances.
Et le Cargo.toml
```ini
[package]
name = "random_url_server"
version = "0.1.0"
edition = "2021"
[dependencies]
hyper = { version = "0.14", features = ["full"] }
tokio = { version = "1", features = ["full"] }
rand = { version = "*"}
pretty_env_logger = "0.4"
```
Sous licence Creative common. Lisez, copiez, modifiez faites en ce que vous voulez.