【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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/887458.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL联合索引、索引下推Demo

1.联合索引 测试SQL语句如下:表test中共有4个字段(id, a, b, c),id为主键 drop table test;#建表 create table test(id bigint primary key auto_increment,a int,b int,c int )#表中插入数据 insert into test(a, b, c) values(1,2,3),(2,3,4),(4,5,…

云服务器部署k8s需要什么配置?

云服务器部署k8s需要什么配置?云服务器部署K8s需要至少2核CPU、4GB内存、50GBSSD存储的主节点用于管理集群,工作节点建议至少2核CPU、2GB内存、20GBSSD。还需安装Docker,选择兼容的Kubernetes版本,配置网络插件,以及确…

【黑马点评】 使用RabbitMQ实现消息队列——1.Docker与RabbitMQ环境安装

黑马点评中,使用基于Redis的Stream实现消息队列,但是Strema已经不太常用。在此修改为使用RabbitMQ实现消息队列。主要包括RabbitMQ的环境准备(Docker的下载与安装)以及如何修改黑马点评中的代码。 【黑马点评】使用RabbitMQ实现消…

《Linux从小白到高手》理论篇:Linux的资源监控管理

本篇介绍Linux的资源监控管理。 1、CPU 资源管理 进程调度: Linux 采用公平的进程调度算法,确保每个进程都能获得合理的 CPU 时间。调度算法会根据进程的优先级、等待时间等因素来决定哪个进程获得 CPU 使用权。 可以通过调整进程的优先级来影响其获得…

基于SpringBoot+Vue+MySQL的校园二手物品交易系统

系统展示 用户前台界面 管理员后台界面 系统背景 校园二手物品交易系统开发的背景与重要性随着高等教育的蓬勃发展,大学生群体的规模持续扩大,随之而来的是物品更新换代速度的显著加快。学生们在追求新潮、高品质生活的同时,往往会产生大量闲…

多文件并发多线程MD5工具(相对快速的MD5一批文件),适配自定义MD5 Hash I/O缓存。

自己写的多文件 MD5校验工具,一个文件开一个线程,有最大I/O 缓存设置,兼容读写MD5后缀文件。 共计91个文件,合计180G左右 12分钟左右,UI基本卡废,但程序没蹦,属于正常。 卡的原因是基本是用 I/O…

手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]

有时候,您会被锁定在自己的 Android 设备之外,而且似乎不可能重新进入。 一个例子就是你买了一部二手手机,后来发现无法使用。另一种情况是你忘记了屏幕锁定密码和用于验证密码的 Google 帐户凭据。这种情况很少见,但确实会发生&…

[uni-app]小兔鲜-07订单+支付

订单模块 基本信息渲染 import type { OrderState } from /services/constants import type { AddressItem } from ./address import type { PageParams } from /types/global/** 获取预付订单 返回信息 */ export type OrderPreResult {/** 商品集合 [ 商品信息 ] */goods: …

MongoDB 数据库服务搭建(单机)

下载地址 下载测试数据 作者:程序那点事儿 日期:2023/02/15 02:16 进入下载页,选择版本后,右键Download复制连接地址 下载安装包 ​ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.14.tgz​ …

java计算机毕设课设—推箱子游戏(附源码、文章、相关截图、部署视频)

这是什么系统? 基于JAVA的推箱子游戏是一个经典的益智游戏,旨在通过推动箱子到指定位置来锻炼玩家的思维和策略能力。本游戏提供了多种不同难度的关卡,以满足不同玩家的需求。整个程序包括五个主要模块:初始化模块、画图模块、移…

如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue

TOC ssm779基于SSM的宠物服务平台的设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化&#x…

中九无科研无竞赛保研经验帖——上交软院、中科大计算机、复旦工程硕、南大工程硕、浙大软件

本人bg: 学校:中九软件工程rk:夏令营5%,预推免3%(都是写的预估排名)六级:480, 四级:540科研:无竞赛:美赛M,以及水赛国三、省二若干 保研前期没有…

【第三版 系统集成项目管理工程师】第15章 组织保障

持续更新。。。。。。。。。。。。。。。 【第三版】第十五章 组织保障 15.1信息和文档管理15.1.1 信息和文档1.信息系统信息-P5462.信息系统文档-P546 15.1.2 信息(文档)管理规则和方法1.信息(文档)编制规范-P5472.信息(文档)定级保护-P5483.信息(文档)配置管理-P549练习 15.…

STM32三种启动模式:【详细讲解】

STM32在上电后,从那里启动是由BOOT0和BOOT1引脚的电平决定的,如下表: BOOT模式选引脚启动模式BOOT0BOOT1X0主Flash启动01系统存储器启动11内置SRAM启动 BOOT 引脚的值在重置后 SYSCLK 的第四个上升沿时被锁定。在重置后,由用户决定是如何设…

加密与安全_HOTP一次性密码生成算法

文章目录 HOTP 的基础原理HOTP 的工作流程HOTP 的应用场景HOTP 的安全性安全性增强措施Code生成HOTP可配置项校验HOTP可拓展功能计数器(counter)计数器在客户端和服务端的作用计数器的同步机制客户端和服务端中的计数器表现服务端如何处理计数器不同步计…

数据链路层 ——MAC

目录 MAC帧协议 mac地址 以太网帧格式 ARP协议 ARP报文格式​编辑 RARP 其他的网络服务或者协议 DNS ICMP协议 ping traceroute NAT技术 代理服务器 网络层负责规划转发路线,而链路层负责在网络节点之间的转发,也就是"一跳"的具体传输…

R语言的下载、安装及环境配置(RstudioVSCode)

0x01 R语言篇 一、软件介绍 R for Windows是一个免费的用于统计计算和统计制图的优秀工具,是R语言开发工具。它拥有数据存储和处理系统、数组运算工具(其向量、矩阵运算方面功能尤其强大)、完整连贯的统计分析工具、优秀的统计制图等功能。…

大厂笔试现已经禁用本地IDE怎么看

如果我说本来面试做题这种事情就是反人类你相信吗? 这个罪恶的源头就是 Google,说是为了选择高素质的计算机编程水平的人才,然后把面试就变成了考试,最大的受益者当然是印度人了。 当把一个考察过程变成标准化的考试过程&#x…

CTFshow 命令执行 web29~web36(正则匹配绕过)

目录 web29 方法一:include伪协议包含文件读取 方法二:写入文件 方法三:通识符 web30 方法一:filter伪协议文件包含读取 方法二:命令执行函数绕过 方法三:写入文件 web31 方法一:filter伪…

openEuler 24.03 (LTS) 部署 K8s(v1.31.1) 高可用集群(Kubespray Ansible 方式)

写在前面 实验需要一个 CNI 为 flannel 的 K8s 集群之前有一个 calico 的版本有些旧了,所以国庆部署了一个v1.31.1 版本 3 * master 5 * work时间关系直接用的工具 kubespray博文内容为部署过程以及一些躺坑分享需要科学上网理解不足小伙伴帮忙指正 😃,生活加油 99…