#http-server #low-level #http #server #gd #grupadomanscy

gdhttp

尽可能底层地实现 Rust 语言的 HTTP 服务器

4 个稳定版本

1.0.3 2023 年 5 月 15 日

#478文本编辑器

每月 23 次下载

MIT 许可证

12KB
163

此库的开发已停止

GDHttp

GDHttp 是您可以为 Rust 语言创建的最低层的 HTTP 服务器。

目前仅支持 HTTP 1.1

如何使用它?

您可以使用 startstart_multithreaded 方法启动服务器。区别在于后者通过 thread::spawn (您传递的第二个参数) 执行回调。在回调中,您可以处理请求,但必须返回一个 http 响应结构。

文档

我知道,我知道,那个 status_code_message 东西会以某种其他方式完成。这是临时的。我只是需要尽快完成这个库,所以就这样。

简单示例,对所有请求返回 200 OK,Hello World

use std::collections::HashMap;
use gdhttp::HttpResponse;

fn main() {
    let _ = gdhttp::start("0.0.0.0:8080", |_request| {
        return HttpResponse {
            body: "Hello world".to_string(),
            headers: HashMap::new(),
            status_code: 200,
            status_code_message: "OK".to_string(),
        };
    });
}

多线程示例

use std::collections::HashMap;
use gdhttp::HttpResponse;

fn main() {
    let _ = gdhttp::start_multithreaded("0.0.0.0:8080", |_request| {
        return HttpResponse {
            body: "Hello world".to_string(),
            headers: HashMap::new(),
            status_code: 200,
            status_code_message: "OK".to_string(),
        };
    });
}

我的应用程序抛出了空的 400 错误请求,我做错了什么?

此库会在接收到来自客户端的无效有效负载时抛出 400 错误请求错误。可能您的请求只是编写错误。如果您认为并非如此,请提交一个问题。这个库很年轻,因此这种情况是正常的。

基准测试

在 ASUS Zenbook 14 UX425E i5-1135G7 16GB RAM 的 Fedora 37 KDE 变种上进行了两次基准测试。所有基准测试都使用了 Autocannon。

Autocannon 选项

  • 持续时间:60s
  • 并发连接:30
  • 工作者:3

1. 启动方法

执行代码

use std::collections::HashMap;
use gdhttp::HttpResponse;

fn main() {
    let _ = gdhttp::start("0.0.0.0:8080", |_| {
        return HttpResponse {
            body: "Hello world".to_string(),
            headers: HashMap::new(),
            status_code: 200,
            status_code_message: "OK".to_string(),
        };
    });
}

结果

  • 每秒 19035 请求(平均)
  • 60.01s 内 2284000 请求
  • CPU 使用率未超过 5.7%(由 btop 测量)
  • 最大 RAM 使用:2.00MiB(由 btop 测量)

2. 启动多线程方法

执行代码

use std::collections::HashMap;
use gdhttp::HttpResponse;

fn main() {
    let _ = gdhttp::start_multithreaded("0.0.0.0:8080", |_| {
        return HttpResponse {
            body: "Hello world".to_string(),
            headers: HashMap::new(),
            status_code: 200,
            status_code_message: "OK".to_string(),
        };
    });
}

结果

  • 每秒 14897 请求(平均)
  • 60.03s 内 1788000 请求
  • CPU 使用率:22%(由 btop 测量)
  • 最大 RAM 使用:2.71MiB(由 btop 测量)

无运行时依赖项