37个版本 (19个稳定版)

使用旧的Rust 2015

3.6.2 2023年4月24日
3.6.1 2022年10月12日
3.5.0 2021年12月22日
3.4.0 2021年11月4日
0.1.3 2016年3月30日

#11HTTP服务器

Download history • Rust 包仓库 51480/week @ 2024-03-14 • Rust 包仓库 50019/week @ 2024-03-21 • Rust 包仓库 46996/week @ 2024-03-28 • Rust 包仓库 46231/week @ 2024-04-04 • Rust 包仓库 44186/week @ 2024-04-11 • Rust 包仓库 46824/week @ 2024-04-18 • Rust 包仓库 43181/week @ 2024-04-25 • Rust 包仓库 41331/week @ 2024-05-02 • Rust 包仓库 44854/week @ 2024-05-09 • Rust 包仓库 40633/week @ 2024-05-16 • Rust 包仓库 38765/week @ 2024-05-23 • Rust 包仓库 45759/week @ 2024-05-30 • Rust 包仓库 47080/week @ 2024-06-06 • Rust 包仓库 46060/week @ 2024-06-13 • Rust 包仓库 56658/week @ 2024-06-20 • Rust 包仓库 48067/week @ 2024-06-27 • Rust 包仓库

206,676 每月下载量
用于 53 个Crate (37个直接使用)

MIT/Apache

280KB
5.5K SLoC

Rouille,一个Rust Web微框架

Rouille是一个微Web框架库。它创建一个监听套接字并解析来自客户端的传入HTTP请求,然后让你处理请求。

Rouille的设计是为了让了解Rust的人使用起来直观。与类似express的框架不同,它不使用中间件。相反,所有操作都是以线性方式处理的。

与网站密切相关的概念(如cookies、CGI、表单输入等)直接由rouille支持。更通用的概念(如数据库处理或模板化)不直接处理,因为它们被认为与微Web框架正交。然而,rouille的设计使得它可以很容易地与任何第三方库结合使用,无需任何粘合代码。

文档

入门

如果你对HTTP的工作原理有一般了解,文档有详细文档的示例 是很好的入门资源。

许可证

根据以下任一许可证授权:

贡献

除非你明确声明,否则你提交的任何贡献,如果目的是包含在本作品中,则应根据上述方式双许可,不得附加任何额外条款或条件。

常见问题解答

关于性能如何?

Rust中的异步I/O、绿色线程、协程等仍然非常不成熟。

rouille库只是忽略这种优化,专注于提供易于使用的同步API,其中每个请求都在自己的专用线程中处理。

即使rouille本身是异步的,您也需要异步数据库客户端和异步文件加载来充分利用它。目前在Rust生态系统中还没有这样的库。

一旦解决了异步I/O问题,rouille将(希望是透明地)更新以考虑它。

但它快吗?

在作者的老Linux机器上,使用wrk -t 4 -c 4进行的一些基本基准测试显示了以下结果

  • rouille的hello-world示例产生约22k请求/秒。
  • nodejs中的hello world(使用http.createServer)产生约14k请求/秒。
  • tokio-minihttp(据说是目前最快的HTTP服务器)的hello-world示例产生约77k请求/秒。
  • 使用异步I/O和mio的hyper的hello示例产生约53k请求/秒。
  • Go中的hello world产生约51k请求/秒。
  • nginx的默认安装产生约39k请求/秒。

虽然不是最快的,但rouille的性能是合理的。在这些示例中,rouille是唯一一个使用同步I/O的。

是否有数据库连接、模板等功能插件?

将数据库或模板集成到用rouille编写的Web服务器中应该是非常简单的。此外,插件需要维护,往往会造成依赖地狱。在作者看来,通常最好不使用插件。

但我习惯于使用表达式的框架!

而不是这样做:(伪代码)

server.add_middleware(function() {
    // middleware 1
});

server.add_middleware(function() {
    // middleware 2
});

server.add_middleware(function() {
    // middleware 3
});

在rouille中,您只需完全手动处理每个请求

// initialize everything here

rouille::start_server(..., move |request| {
    // middleware 1

    // middleware 2

    // middleware 3
});

依赖关系

~13–26MB
~591K SLoC