1 个稳定版本

3.0.1 2021 年 3 月 26 日

#306 in WebSocket

MIT/Apache

270KB
5K SLoC

Rouille,一个 Rust Web 微框架

注意

这是一个库的维护版本,包含一些升级的依赖和一些最小化现代化的代码库,以便与 Rust 的 2018 年版兼容。有关更多信息,请参阅 MAINT

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

Rouille 被设计成易于使用,如果你熟悉 Rust。与 express-like 框架不同,它不使用中间件。所有操作都是按线性方式处理的。

与网站密切相关的概念(如 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的hello-world示例(据称是目前最快的HTTP服务器)产生约77k请求/秒。
  • 使用异步I/O和mio的hyper的hello示例(产生约53k请求/秒)。
  • Go中的hello world产生约51k请求/秒。
  • nginx的默认安装产生约39k请求/秒。

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

有数据库连接、模板等功能的插件吗?

将数据库或模板集成到rouille编写的Web服务器应该很简单。此外,插件需要维护,并可能导致依赖地狱。作者认为通常最好不使用插件。

但我习惯了express-like框架!

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

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
});

依赖关系

~7–19MB
~293K SLoC