6个版本 (3个重大更改)
使用旧的Rust 2015
0.4.0 | 2018年6月30日 |
---|---|
0.3.0 | 2017年10月9日 |
0.2.1 | 2017年10月9日 |
0.2.0 | 2017年7月20日 |
0.1.3 | 2017年7月17日 |
#817 in HTTP服务器
每月21次下载
29KB
516 行
佩米坎
佩米坎是使用Rust语言构建在hyper之上的Web服务器库。
注意事项和警告
佩米坎相对较新(始于2017年6月),可能将经历重大变化。如果您现在使用它,请期待破坏性更改。我们预计它至少在版本0.4之前不会普遍有用。
插件架构尤其新,当我们在修复问题#8时,它很可能被破坏。
目前,由于它们不是流式传输的,请求和响应体必须全部适合内存。这意味着佩米坎目前不适用于文件上传等。我们打算在版本0.4中修复此问题,但我们可能需要等待hyper 0.12版本才能发布0.4。
概述
佩米坎是(一旦问题得到解决)
- 快速(Rust)
- 并行(线程池)
- 异步(Hyper 0.11与futures)
- 模块化(插件)
- 无偏见(可配置和通用)
- 允许您共享全局状态
佩米坎是快速的
佩米坎是用Rust编写的,这是一种系统级语言,生成的代码通常与其他最快的编译语言(如C和C++)具有相同的运行速度。
我们试图最小化内存分配,避免阻塞I/O,并尝试使用最快的算法。这是一个持续的工作。
非常基本的性能测试在仅使用28%的CPU(Intel(R) Xeon(R) CPU E3-1246 v3 @ 3.50GHz,运行Linux 4.12.13-1-ARCH)的情况下,每秒处理9,633个请求。这不是实际世界的请求,而是理想化的localhost请求,为静态“Hello World!”页面处理程序提供服务。这表明核心路径相当快。
其他非核心路径尚未完全优化。
佩米坎是并行的
佩米坎提供了一个线程池。您可以选择在预存在的线程上运行您的页面处理逻辑。
佩米坎是异步的
佩米坎使用Hyper的新异步版本(基于tokio,futures,mio等)。这意味着每当一个任务无法立即继续时,您的处理器核心可以转移到其他任务,在任务能够进步时保持忙碌,而不是空闲等待事件。
为了确保工作可用时您的核心始终保持忙碌状态,您必须确保页面处理程序返回的Future没有调用阻塞I/O函数。如果其中任何一个调用阻塞I/O,您仍然可以使用pemmican发挥很大作用,但您可能需要配置一个更大的线程池。如果您从不调用阻塞I/O调用,那么理论上您应该使用每个核心一个线程来获得最佳性能。
Pemmican是模块化的
Pemmican是一个Rust库。它是通用的,并不定义您的网站。您定义路由并动态添加。
Pemmican支持插件,因此可以通过单独的crates添加功能,更重要的是,可以排除不需要的功能。
Pemmican没有偏见
Pemmican允许您配置它所依赖的库的各种设置,而不是为您选择。这包括(截至本文写作时)num_threads
、shutdown_timeout
和keep_alive
。我们旨在尽可能地进行配置,只有在绝对必须时才做出选择。
Pemmican允许您定义您将使用的Error类型,只要它是Error + Send + Sync + 'static
。
Pemmican允许您共享全局状态
Pemmican允许您在处理程序之间共享全局状态,只要它是Send + Sync + 'static
。
示例
其他类似的crates
其他作者也在朝着类似的目标努力。请查看以下项目,它们也使用异步hyper提供Web服务
- zircon
- backtalk
- pronghorn
- jsonrpc-http-server
- 截至2017年7月,这就是全部(有37个crates依赖于hyper 0.11,似乎只有这4个尝试成为Web服务器)
还有tk-http,它是不带hyper的异步http
此外,还可以考虑在同步hyper上运行这些更成熟的框架
依赖项
~12MB
~201K SLoC