参考 https://docs.rs/actix-web/0.7.14/actix_web/
#cargo new web_demo
上代码
src/main.rs
mod onget;
use std::{thread, time};
use actix_rt::System;
use actix_web::{ middleware, web, App, HttpRequest, HttpServer,HttpResponse,Responder};
//actix http Server线程
fn run_app() -> std::io::Result<()> {
let mut sys = System::new("test");
// srv is server controller type, `dev::Server`
let srv = HttpServer::new(|| {
App::new()
// enable logger
.wrap(middleware::Logger::default())
.service(web::resource("/index.html").to(onget::index))
.route("/", web::get().to(onget::greet))
})
.bind("0.0.0.0:8888")? // 注意这里很多demo写的是127.0.0.1 只能本地访问,如果用本地IP或者域名不可以访问。建议写成0.0.0.0 ,后面端口随意,没有占用的都可。
.run();
// run future
return sys.block_on(srv);
}
fn main() {
std::env::set_var("RUST_LOG", "actix_web=info,actix_server=trace");
env_logger::init();
println!("START SERVER");
thread::spawn(move || {
run_app().expect("error start http server");
});
//主循环
loop
{
let mut line =String::new();
let _ = std::io::stdin().read_line(&mut line);
thread::sleep(time::Duration::from_secs(10));
}
}
src/onget.rs
use actix_web::{ middleware, web, App, HttpRequest, HttpServer,HttpResponse,Responder};
pub async fn index(req: HttpRequest) -> &'static str {
println!("REQ: {:?}", req);
return "Hello world Index!";
}
pub async fn greet(req: HttpRequest) -> impl Responder {
let name = req.match_info().get("name").unwrap_or("World");
return format!("Hello {}!", &name);
}
Cargo.toml
[package]
name = "web_demo"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
rand = "0.7.0"
actix-web = "2.0.0"
actix-rt = "1.0.0"
env_logger = "0.6"
futures = "0.3.1"
futures-timer = "2.0.0"
执行指令 cargo run
[root@iZ2zebpzalc96fcbag6x0aZ web_demo]# cargo run
warning: unused imports: `App`, `HttpResponse`, `HttpServer`, `middleware`, `web`
--> src/onget.rs:1:18
|
1 | use actix_web::{ middleware, web, App, HttpRequest, HttpServer,HttpResponse,Responder};
| ^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: unused imports: `HttpRequest`, `HttpResponse`, `Responder`
--> src/main.rs:6:40
|
6 | use actix_web::{ middleware, web, App, HttpRequest, HttpServer,HttpResponse,Responder};
| ^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^
warning: `web_demo` (bin "web_demo") generated 2 warnings
Finished dev [unoptimized + debuginfo] target(s) in 0.10s
Running `target/debug/web_demo`
START SERVER
[2022-02-17T13:49:32Z INFO actix_server::builder] Starting 2 workers
[2022-02-17T13:49:32Z INFO actix_server::builder] Starting "actix-web-service-0.0.0.0:8888" service on 0.0.0.0:8888
[2022-02-17T13:49:32Z TRACE actix_server::worker] Service "actix-web-service-0.0.0.0:8888" is available
[2022-02-17T13:49:32Z TRACE actix_server::worker] Service "actix-web-service-0.0.0.0:8888" is available
在浏览器访问 http://39.106.64.6:8888/
运行效果