2个稳定版本

使用旧的Rust 2015

3.0.1 2021年4月12日

#243 in #REST

MIT/Apache

275KB
5.5K SLoC

Rouille NG

rouille-ngRouille 的维护分支,

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

Rouille 被设计成如果您了解Rust,则易于使用。与类似Express的框架不同,它不使用中间件。相反,所有操作都是线性处理的。

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

文档

Rouille NG有什么特点?

原始的Rouille项目已经有一年多没有维护了,而且它似乎不太可能很快重新变得活跃。Rouille NG旨在通过安全修复和用户体验改进来支持在生产中使用Rouille的团队,同时保留与原始库的API兼容性。

目标

  • 保持与Rouille 3.0.0的兼容性
  • 与Rust新版本引入的弃用或编译器警告保持代码库的一致性。
  • 支持等于与Debian稳定版一起提供的最低Rust版本(目前为1.41)。
  • 将安全修复回滚到3.0.y版本。
  • 向3.x版本添加非破坏性用户体验改进。

欢迎符合这些目标的社区贡献!

入门

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

您可以通过在您的 Cargo.toml 中添加以下内容来将Rouille的依赖项替换为Rouille NG:

[dependencies]
rouille = { package = "rouille-ng", version = "3" }

许可证

在以下任一许可证下授权:

贡献

除非你明确声明,否则你有意提交以包含在作品中的任何贡献都应按照上述双许可方式进行,不附加任何额外条款或条件。

常见问题解答

关于性能如何?

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

依赖关系

~8–18MB
~285K SLoC