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次下载

MIT/Apache

29KB
516

佩米坎

MIT licensed Apache-2.0 licensed

佩米坎在crates.io

文档

佩米坎是使用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_threadsshutdown_timeoutkeep_alive。我们旨在尽可能地进行配置,只有在绝对必须时才做出选择。

Pemmican允许您定义您将使用的Error类型,只要它是Error + Send + Sync + 'static

Pemmican允许您共享全局状态

Pemmican允许您在处理程序之间共享全局状态,只要它是Send + Sync + 'static

示例

基本示例

使用ThreadPool的示例

使用插件的示例

使用DynamicRouter的示例

使用Htdocs的示例

其他类似的crates

其他作者也在朝着类似的目标努力。请查看以下项目,它们也使用异步hyper提供Web服务

还有tk-http,它是不带hyper的异步http

此外,还可以考虑在同步hyper上运行这些更成熟的框架

  • iron
  • rocket
  • 我相信还有我不知道的其他框架。

依赖项

~12MB
~201K SLoC