1 个稳定版本
3.0.1 | 2021 年 3 月 26 日 |
---|
#306 in WebSocket
270KB
5K SLoC
Rouille,一个 Rust Web 微框架
注意
这是一个库的维护版本,包含一些升级的依赖和一些最小化现代化的代码库,以便与 Rust 的 2018 年版兼容。有关更多信息,请参阅 MAINT。
Rouille 是一个微 Web 框架库。它创建一个监听套接字并解析来自客户端的 HTTP 请求,然后将请求处理权交给你。
Rouille 被设计成易于使用,如果你熟悉 Rust。与 express-like 框架不同,它不使用中间件。所有操作都是按线性方式处理的。
与网站密切相关的概念(如 cookies、CGI、表单输入等)由 rouille 直接支持。更通用的概念(如数据库处理或模板化)不直接处理,因为它们被认为是与微 Web 框架正交的。然而,rouille 的设计使其易于与任何第三方库结合使用,无需任何粘合代码。
文档
入门指南
如果你对 HTTP 的工作原理有一定的了解,文档 和 详尽的示例 是你入门的好资源。
许可协议
根据以下任一许可协议授权:
- Apache License,版本 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT),由你选择。
贡献
除非你明确声明,否则你提交的任何贡献都应作为上述双许可协议的一部分包含在内,不附加任何额外的条款或条件。
常见问题解答
关于性能如何?
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