Rust 搭建一个web应用部署到阿里云

参考 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/


运行效果

你可能感兴趣的:(Rust 搭建一个web应用部署到阿里云)