一个Rust实现的简单HttpServer框架
个人学习项目,欢迎交流
已实现功能
- 
解析http请求 - Post
- Get
 
- 
响应http请求 
- 
Http请求处理逻辑 - 路由功能
- 多线处理
- 1:1多线程(默认方式)
- 线程池(在cargo中指定features = ["thread-pool"])
 
 
待实现功能
- 解析http请求参数
- 路由缓存
- 解析请求体
- 文件上传
- 静态资源访问
- 路由功能
目录模块结构
├─http
│  └─src
│      ├─http_handler   # 封装handler相关
│      ├─http_request   # 封装http请求相关
│      ├─http_response  # 封装http响应相关
│      ├─http_router    # 路由相关
│      └─http_server    # http服务器参数配置以及启动相关
├─simple_http           # Demo
│  └─src
└─thread_pool           # 封装线程池相关
    └─src
代码示例
// main.rs
use http::{
    http_method::method::Method,
    http_request::request::HttpResuest,
    http_response::response::HttpResponse,
    http_router::{router::Router, router_handler::RouterHandler},
    http_server::server::HttpServer,
};
fn main() {
    // 初始化一个Application
    let mut server = HttpServer::application();
    // 创建一个Router
    let mut router = Router::new();
    // 将route函数添加到router中
    router.add_route(RouterHandler::new(Method::GET, "/", |_r, w| {
        w.write_str("hello world");
    }));
    router.add_route(RouterHandler::new(Method::GET, "/hi", route_fn));
    // 设置Http监听地址,并挂载Router到该服务中
    server
        // 设置线程池中线程的数量,默认为cpu核数+1
        .configure(HttpServer::set_thread_pool_num(10))
        // 设置监听地址,默认为127.0.0.1:8080
        .configure(HttpServer::set_addr("127.0.0.1:8081"))
        // 挂载Router到当前server
        .mount_route(router);
    // 启动Http服务
    server.start();
    println!("{:?}", server);
}
fn route_fn(_r: &HttpResuest, w: &mut HttpResponse) {
    // 输出中文需要添加响应头,否则会出现乱码
    w.insert_header("Content-Type", "text/html;charset=utf-8");
    println!("remote addr: {}", _r.get_remote_addr());
    if let Some(header) = _r.get_header("User-Agent") {
        println!("User-Agent: {}", header);
    }
    w.write_str("你好Rust");
}
# Cargo.toml
[package]
name = "simple_http"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
# 如果不指定futures,则默认使用1:1多线程的方式运行
# 当指定features = ["thread-pool"]时,则使用线程池方式运行,线程池中线程数量为CPU核心数+1,也可以通过 HttpServer::set_thread_pool_num(num) 自定义线程池中的线程数量
http = {path = "../http",features = ["thread-pool"]}
Ext Link: https://github.com/t924417424/rust_simple_http_server/
	    
	    
		1
	    
	    
	    共 0 条评论, 1 页
	
	
    
评论区
写评论还没有评论