当前位置: 首页 > article >正文

【Python】Hypercorn:轻量级的异步ASGI/WSGI服务器

在这里插入图片描述

Hypercorn 是一个支持异步 ASGI 和同步 WSGI 应用的高效 Python 服务器。它结合了现代协议支持(包括 HTTP/1、HTTP/2 和 HTTP/3),并且为异步 Web 框架(如 FastAPI 和 Quart)提供了卓越的性能和灵活性。通过 Hypercorn,开发者可以轻松处理高并发请求,同时支持多种协议和事件循环。

在这里插入图片描述
华丽的分割线

⭕️宇宙起点

    • 💯 核心功能
      • 1. 多协议支持
      • 2. 多事件循环支持
      • 3. 灵活的配置方式
      • 4. 优雅的关闭机制
    • 💯 示例代码
      • Hello World ASGI 应用
      • 使用 Trio 事件循环的示例
    • 💯 配置选项表
    • 💯 适用场景
    • 📥 下载地址
    • 💬 结语
    • 📒 参考文献


标题1

💯 核心功能

1. 多协议支持

Hypercorn 支持 HTTP/1、HTTP/2 和 HTTP/3 协议,同时也支持 WebSockets。HTTP/2 和 HTTP/3 的引入极大提高了并发性能和传输效率,尤其在需要处理大量并发请求的应用中表现优异。

2. 多事件循环支持

Hypercorn 不仅支持 Python 的 asyncio 事件循环,还支持 trio,并且与 uvloop 完全兼容。这种灵活性允许开发者根据应用的需求选择最合适的事件循环,以实现更高效的并发性能。

3. 灵活的配置方式

Hypercorn 提供了多种配置方式,包括:

  • 命令行参数:可以快速设置服务器启动参数。
  • TOML 文件:适合项目中统一管理配置。
  • Python 配置模块:可以通过动态代码生成配置文件。
    例如,可以使用 .toml 文件进行配置:
hypercorn --config config.toml

TOML 文件示例:

bind = "127.0.0.1:8000"
access_log_format = "%(h)s %(r)s %(s)s"

Python 动态配置示例:

from hypercorn.config import Config
config = Config()
config.bind = ["127.0.0.1:8000"]

4. 优雅的关闭机制

Hypercorn 支持优雅关闭功能,当收到退出信号(如 SIGTERM)时,服务器会等待正在处理的请求完成后才退出,避免请求丢失。以下是实现优雅关闭的代码示例:

import asyncio
import signal

async def app(scope, receive, send):
    if scope['type'] == 'http':
        await send({
            'type': 'http.response.start',
            'status': 200,
            'headers': [(b'content-type', b'text/plain')],
        })
        await send({
            'type': 'http.response.body',
            'body': b'Hello, world!',
        })

shutdown_event = asyncio.Event()

def _signal_handler(*_: Any) -> None:
    shutdown_event.set()

loop = asyncio.get_event_loop()
loop.add_signal_handler(signal.SIGTERM, _signal_handler)
loop.run_until_complete(serve(app, config, shutdown_trigger=shutdown_event.wait))

标题2

💯 示例代码

Hello World ASGI 应用

这是一个简单的 ASGI 应用,使用 Hypercorn 运行:

async def app(scope, receive, send):
    if scope['type'] == 'http':
        await send({
            'type': 'http.response.start',
            'status': 200,
            'headers': [(b'content-type', b'text/plain')],
        })
        await send({
            'type': 'http.response.body',
            'body': b'Hello, World!',
        })

运行命令:

hypercorn app:app --bind 127.0.0.1:8000

使用 Trio 事件循环的示例

import trio
from hypercorn.config import Config
from hypercorn.trio import serve

config = Config()
config.bind = ["127.0.0.1:8000"]

async def app(scope, receive, send):
    if scope['type'] == 'http':
        await send({
            'type': 'http.response.start',
            'status': 200,
            'headers': [(b'content-type', b'text/plain')],
        })
        await send({
            'type': 'http.response.body',
            'body': b'Hello from Trio!',
        })

trio.run(serve, app, config)

标题3

💯 配置选项表

以下是 Hypercorn 常用的配置选项:

配置项命令行参数默认值说明
bind--bind127.0.0.1:8000监听的地址和端口
access_log_format--access-logformat%(h)s %(r)s %(s)s定义访问日志的格式
graceful_timeout--graceful-timeout300 秒在收到终止信号后,允许的最大优雅关闭时间
debug--debugFalse启用调试模式,提供更多日志信息
h2_max_concurrent_streamsN/A100HTTP/2 的最大并发流数量
include_server_headerN/ATrue是否包含 Server: Hypercorn 的响应头
read_timeout--read-timeoutTCP 读取超时时间
ca_certs--ca-certs指定 SSL CA 证书路径

标题4

💯 适用场景

Hypercorn 非常适合以下场景:

  1. 高并发异步应用:对于需要处理大量并发请求的应用,Hypercorn 的异步架构能够充分发挥其优势。
  2. 多协议支持:对于需要同时处理 HTTP/1、HTTP/2、HTTP/3 和 WebSockets 的应用,Hypercorn 提供了全面的支持。
  3. 优雅关闭需求:在生产环境中,应用可能需要在不中断现有请求的情况下安全退出,Hypercorn 提供了优雅关闭的能力。

标题5

📥 下载地址


Hypercorn 最新版 下载地址


标题7

💬 结语

Hypercorn 的灵活性和现代化协议支持,使其成为现代 Web 应用程序的理想选择,特别是在异步框架下,它能够显著提升应用的性能和响应速度。


标题8

📒 参考文献

  • Hypercorn GitHub仓库

TheEnd


在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/news/335292.html

相关文章:

  • ubuntu中挂载点内存不足,分配不合理后使用软链接的注意事项
  • C++ | Leetcode C++题解之第456题132模式
  • Linux中环境变量
  • S7-200 SMART Modbus RTU常见问题
  • 一文上手SpringSecurity【八】
  • SpringCloudStream+RocketMQ多topic
  • Spring Boot新闻推荐系统:技术与策略
  • uniapp 上了原生的 echarts 图表插件了 兼容性还行
  • 基于单片机远程家电控制系统设计
  • vsomeip用到的socket
  • http2详细讲解
  • Graph Retrieval-Augmented Generation: A Survey
  • d3底层绘制拓扑图
  • 【React】react项目中的redux使用
  • 【开源开放体系总结】
  • 【自然语言处理】(1) --语言转换方法
  • 刷题记录(好题)
  • 开发指南065-缩减包
  • 移动WSL到其他盘
  • MATLAB中正则表达式的全面应用与实践