Rust开发服务器库devserver_lib的使用,提供高效本地服务器搭建与调试功能

devserver_lib

devserver_lib 是一个 Rust 开发的服务器库,它提供了(几乎)最低限度的功能来通过 https://localhost:8080 服务一个静态文件夹。

不要在正式生产环境中使用 devserver_lib

devserver_lib 应该只用于在可信网络上本地托管文件。devserver_lib 不能正确处理在开放网络中稳健服务器必须承受的攻击。

使用方法

以下是使用 devserver_lib 的基本示例:

extern crate devserver_lib;

fn main() {
  // 在当前文件夹上运行 http://localhost:8080 服务器,并启用自动重载
  devserver_lib::run(&"localhost", 8080, "", /*Auto-reload:*/ true ); 
}

完整示例

以下是一个更完整的示例,展示了如何创建一个简单的静态文件服务器:

extern crate devserver_lib;

fn main() {
    // 配置服务器参数
    let host = "localhost";  // 主机名
    let port = 8080;         // 端口号
    let root_path = "";      // 根目录路径(空表示当前目录)
    let auto_reload = true;  // 启用自动重载功能

    println!("Starting server at http://{}:{}", host, port);
    
    // 启动服务器
    devserver_lib::run(host, port, root_path, auto_reload);
    
    // 注意:run函数会阻塞当前线程,不会返回
}

依赖项

主要依赖:

  • rust-native-tls

仅用于重载功能的依赖:

  • notify
  • sha-1
  • base64

学习资源

  • Rust 官方文档中的 web 服务器项目
  • 用 Rust 创建静态 HTTP 服务器

安装

在项目目录中运行以下 Cargo 命令:

cargo add devserver_lib

或者在 Cargo.toml 中添加以下行:

devserver_lib = "0.4.2"

许可证

Zlib 许可证

完整示例代码

以下是一个扩展的完整示例,展示了更多配置选项和使用方式:

extern crate devserver_lib;

use std::path::Path;

fn main() {
    // 配置服务器参数
    let host = "127.0.0.1";  // 也可以使用 "localhost"
    let port = 3000;         // 使用自定义端口
    let root_path = "./public";  // 指定特定的静态文件目录
    let auto_reload = true;  // 启用文件变化自动重载
    
    // 检查目录是否存在
    if !Path::new(root_path).exists() {
        eprintln!("错误: 目录 {} 不存在", root_path);
        return;
    }

    println!("启动开发服务器...");
    println!("服务目录: {}", root_path);
    println!("访问地址: http://{}:{}", host, port);
    
    // 启动服务器
    match devserver_lib::run(host, port, root_path, auto_reload) {
        Ok(_) => println!("服务器已停止"),
        Err(e) => eprintln!("服务器错误: {}", e),
    }
}

这个扩展示例增加了:

  1. 使用不同的端口(3000)
  2. 指定特定的静态文件目录(./public)
  3. 添加了错误处理
  4. 增加了目录存在性检查
  5. 提供了更详细的启动信息输出

1 回复

Rust开发服务器库devserver_lib使用指南

简介

devserver_lib是一个用于快速搭建本地开发服务器的Rust库,提供了高效的静态文件服务和调试功能,特别适合前端开发、API测试和本地开发环境搭建。

主要特性

  • 轻量级高性能HTTP服务器
  • 静态文件服务
  • 热重载支持
  • 跨平台兼容
  • 可配置的路由和中间件

安装方法

在Cargo.toml中添加依赖:

[dependencies]
devserver_lib = "0.1"  # 请使用最新版本号

基础使用示例

1. 启动简单静态文件服务器

use devserver_lib::Server;

fn main() {
    let server = Server::new()
        .port(8080)
        .static_dir("./public")  // 设置静态文件目录
        .start()
        .expect("Failed to start server");
    
    println!("Server running at http://localhost:8080");
    server.wait();  // 阻塞主线程保持服务器运行
}

2. 自定义路由处理

use devserver_lib::{Server, Request, Response};

fn main() {
    let server = Server::new()
        .port(3000)
        .get("/api/hello", |_req: Request| {
            Response::text("Hello from devserver!")
        })
        .post("/api/echo", |req: Request| {
            Response::json(&req.body)
        })
        .start()
        .unwrap();
    
    server.wait();
}

高级功能

1. 中间件支持

use devserver_lib::{Server, Request, Response, MiddlewareResult};

fn logger(req: &Request) -> MiddlewareResult {
    println!("[{}] {} {}", req.method, req.path, req.query);
    Ok(())
}

fn main() {
    Server::new()
        .middleware(logger)
        .get("/", |_| Response::text("Logged request"))
        .start()
        .unwrap()
        .wait();
}

2. WebSocket支持

use devserver_lib::{Server, WsMessage};

fn main() {
    Server::new()
        .ws("/ws", |msg: WsMessage| {
            println!("Received WS message: {:?}", msg);
            Some(WsMessage::Text("Echo: ".to_string() + &msg.to_string()))
        })
        .start()
        .unwrap()
        .wait();
}

3. 热重载配置

use devserver_lib::Server;
use std::time::Duration;

fn main() {
    Server::new()
        .port(8080)
        .static_dir("./src")
        .hot_reload(Duration::from_secs(1))  // 每秒检查文件变化
        .start()
        .unwrap()
        .wait();
}

配置选项

方法 说明 默认值
.port() 设置服务器端口 3000
.static_dir() 设置静态文件目录
.hot_reload() 启用热重载并设置检查间隔 禁用
.middleware() 添加中间件函数
.get()/.post() 添加路由处理

性能建议

  1. 生产环境建议设置线程池大小:
Server::new()
    .threads(4)  // 根据CPU核心数设置
    // ...其他配置
  1. 对于大量静态文件,启用内存缓存:
Server::new()
    .static_dir("./assets")
    .enable_cache(true)

错误处理

devserver_lib提供了详细的错误报告:

match Server::new().start() {
    Ok(server) => server.wait(),
    Err(e) => eprintln!("Server error: {:?}", e),
}

完整示例demo

下面是一个结合静态文件服务、自定义路由和中间件的完整示例:

use devserver_lib::{Server, Request, Response, MiddlewareResult};
use std::time::Duration;

// 自定义中间件 - 请求日志记录
fn request_logger(req: &Request) -> MiddlewareResult {
    println!("[请求日志] {} {} 查询参数: {:?}", req.method, req.path, req.query);
    Ok(())
}

// 自定义中间件 - 响应时间头
fn response_timing(_req: &Request, res: &mut Response) -> MiddlewareResult {
    res.headers.insert("X-Response-Time".to_string(), "100ms".to_string());
    Ok(())
}

fn main() {
    let server = Server::new()
        .port(8080)
        // 静态文件服务配置
        .static_dir("./public")
        .enable_cache(true)
        // 热重载配置
        .hot_reload(Duration::from_secs(2))
        // 中间件配置
        .middleware(request_logger)
        .middleware(response_timing)
        // 自定义路由
        .get("/api/status", |_| {
            Response::json(&serde_json::json!({
                "status": "ok",
                "version": "1.0.0"
            }))
        })
        .post("/api/users", |req| {
            // 这里可以添加用户创建逻辑
            Response::json(&req.body)
        })
        // WebSocket支持
        .ws("/chat", |msg| {
            println!("收到聊天消息: {:?}", msg);
            Some(WsMessage::Text(format!("服务器回复: {}", msg.to_string())))
        })
        // 性能配置
        .threads(4)
        .start()
        .expect("服务器启动失败");

    println!("开发服务器已启动: http://localhost:8080");
    println!("静态文件目录: ./public");
    println!("WebSocket端点: ws://localhost:8080/chat");
    
    server.wait();
}

总结

devserver_lib是一个功能丰富且易于使用的Rust服务器库,特别适合开发阶段的快速原型搭建和调试。通过简单的API可以快速构建出功能完善的本地开发服务器,支持静态文件服务、自定义路由、中间件和WebSocket等现代Web开发所需的功能。

回到顶部