SGI-服务器比较
WSGI/ASGI 服务器作为 Python Web 应用程序和 Web 服务器之间的重要网关,确保了流畅高效的通信。它们提供了一个标准化的接口,促进请求和响应管理,增强了应用程序的性能和可扩展性,并允许开发人员专注于功能开发,而无需处理 HTTP 请求处理的底层细节。
这种抽象和灵活性使 WSGI/ASGI 服务器成为部署现代和高性能 Python Web 应用程序不可或缺的工具。
旧框架不被认为是好的候选者:cherrypy, twisted, sanic, tornado 这些旧框架仅在此处引用,以概述当前的技术水平。由于一些框架,例如 tornado,几年前就已经在 OpenStack 中被 Eventlet 替代,因此这些旧框架不被认为是合适的候选者。
请将您的评论和意见放入相关的 etherpad: https://etherpad.opendev.org/p/eventlet-removal-SGI-servers-comparison
Web 框架比较,请在此处进行 https://wiki.openstack.org/wiki/web-frameworks-comparison
HTTP 库(客户端库)比较,请在此处进行 https://wiki.openstack.org/wiki/Http-libraries-comparison
以下是 Python 社区中可用的主要 WSGI 和 ASGI 服务器的比较
| 服务器 | WSGI 支持 | ASGI 支持 | 积极维护 | asyncio 支持 | HTTP/1.0 | HTTP/1.1 | HTTP/2 | 评论 |
|---|---|---|---|---|---|---|---|---|
| uWSGI | Yes | 有限 | 适中。已进入维护模式,这意味着我们不应期望对新协议(如 HTTP/2 等)的支持。 https://github.com/unbit/uwsgi/blob/master/README | 有限 | Yes | Yes | 否 | 通常与反向代理(Nginx, Caddy)一起用于 HTTP/2 |
| Uvicorn | 否 | Yes | 非常活跃 | 完成 | 否 | Yes | 部分 | 实验性的 HTTP/2 支持,针对 ASGI 进行了优化 |
| Hypercorn | 是(有局限性) | Yes | 中等 | 完成 | Yes | Yes | Yes | 完全支持 HTTP/2,无需代理 |
| Gunicorn | Yes | 是(使用 worker) | 安静 | 部分 | Yes | Yes | 否 | 通过 worker(如 `UvicornWorker`)支持 ASGI |
| Daphne | 否 | Yes | 安静 | 完成 | 否 | Yes | 否 | 针对 Django Channels 和 WebSockets 进行了优化 |
| Waitress | Yes | 否 | 中等 | 有限 | Yes | Yes | 否 | 纯 WSGI 服务器,简单可靠,适用于同步应用程序 |
| Bjoern | Yes | 否 | 适度活跃 | 有限 | Yes | Yes | 否 | 用 C 编写的超快速 WSGI 服务器,适用于高性能 |
| CherryPy | Yes | 否 | 安静 | 有限 | Yes | Yes | 否 | 包含自己的 WSGI 服务器,通常在生产环境中用于其他服务器的后端 |
| Tornado | 部分(通过适配器) | 否 | 活跃 | 完整(自有模型) | 否 | Yes | 部分 | 异步框架,内置服务器,适用于实时应用程序 |
| Twisted | 是(通过 `twisted.web.wsgi`) | 否 | 非常活跃 | 基于 Twisted | 否 | Yes | 否 | 强大的异步网络库,使用自己的异步模型 |
| Sanic | 否 | 是(通过适配) | 活跃 | 完成 | 否 | Yes | 部分 | 异步 Web 框架,针对高性能进行了优化 |