#request-response #server #http #async-io #web #json-response

http_lolo

一个简单、轻量级、单线程的 HTTP 服务器,具有非阻塞 I/O 以处理并发操作

1 个不稳定版本

0.1.0 2024 年 7 月 28 日

#376HTTP 服务器

Download history 135/week @ 2024-07-28 1/week @ 2024-08-04

136 每月下载量

MIT 许可证

34KB
765

http_lolo

一个简单、轻量级、单线程的 HTTP 服务器,具有非阻塞 I/O 以处理并发操作。

功能

  • 单线程架构,具有非阻塞 I/O
  • 使用 epoll 并发处理请求
  • 简单直观的 API 用于处理路由
  • 支持多个服务器实例
  • 可自定义请求和响应处理

安装

将以下内容添加到您的 Cargo.toml

[dependencies]
http_lolo = "0.1.0"

快速入门

use http_lolo::{HttpServer, Request, ResponseWriter};

fn main() {
    let server = HttpServer::new();

    server.handle_route("/", Box::new(|_: &mut Request, w: &mut ResponseWriter| {
        w.write_string("Hello, World!".to_string());
    }));

    server.listen_on("127.0.0.1:8080");

    HttpServer::run_all();
}

使用方法

创建新的服务器实例

let server = HttpServer::new();

添加路由处理器

server.handle_route("/", Box::new(|_: &mut Request, w: &mut ResponseWriter| {
    w.write_string("Hello, World!".to_string());
}));

启动服务器

server.listen_on("127.0.0.1:8080");
HttpServer::run_all();

处理请求

在您的路由处理器中,您可以访问请求数据并写入响应

|req: &mut Request, resp: &mut ResponseWriter| {
    // Access request data
    println!("Method: {}", req.method);
    println!("Path: {}", req.path);

    // Write response
    resp.set_status(200);
    resp.write_string("Response content".to_string());
}

高级使用

多个服务器实例

您可以在不同的端口上创建多个服务器实例

let server1 = HttpServer::new();
let server2 = HttpServer::new();

// Add route handlers to server1 and server2

server1.listen_on("127.0.0.1:8080");
server2.listen_on("127.0.0.1:8081");

HttpServer::run_all();

JSON 响应

use http_lolo::JsonValue;

resp.write_json(json::object!{
    "key" => "value",
    "number" => 42
});

贡献

欢迎贡献!请随时提交拉取请求。

依赖关系

~11–23MB
~368K SLoC