ویژگی تصویر

معرفی کتابخانه Hypercorn در پایتون

  /  پایتون   /  کتابخانه hypercorn در پایتون
بنر تبلیغاتی الف

Hypercorn یک سرور ASGI نوشته‌شده برای اکوسیستم پایتون است که توسط تیم پروژه Quart توسعه یافته است. این سرور از چندین مدل همزمانی (asyncio، trio، curio) پشتیبانی می‌کند و امکاناتی مثل HTTP/2، WebSocket و پشتیبانی آزمایشی از HTTP/3 (QUIC) را فراهم می‌آورد. هدف Hypercorn ارائهٔ انعطاف‌پذیری و تطبیق‌پذیری بالا برای اپلیکیشن‌های آسینکرون و فریم‌ورک‌هایی مانند Quart، Starlette و FastAPI است.

ویژگی‌های کلیدی

  • پشتیبانی از ASGI (Application Server Gateway Interface)
  • هماهنگی با چند مدل رویداد: asyncio، trio و curio
  • پشتیبانی از HTTP/2 و WebSocket؛ پشتیبانی آزمایشی از HTTP/3
  • قابلیت اجرا به‌صورت برنامه‌ای (programmatic) و با CLI
  • قابلیت TLS/SSL داخلی و گزینه‌های زیاد تنظیماتی

چرا Hypercorn؟ چه زمانی باید از آن استفاده کرد

اگر نیاز دارید اپلیکیشنی بنویسید که از مدل‌های همزمانی غیراستاندارد (مثلاً trio) استفاده می‌کند، یا خواهان پشتیبانی سریع و آسان از HTTP/2 و WebSocket هستید، Hypercorn انتخاب مناسبی است. همچنین زمانی که می‌خواهید از امکانات پیشرفته‌ای مثل اجرای برنامه از طریق API پایتون (بدون فراخوانی CLI) بهره ببرید، Hypercorn انعطاف‌پذیری خوبی دارد.

مقایسهٔ سریع با Uvicorn و Gunicorn

ویژگیHypercornUvicornGunicorn
پشتیبانی ASGIبلهبلهنه (WSGI)
مدل همزمانیasyncio / trio / curioasyncioسنتی (multi-process)
HTTP/2بلهمحدودخیر

نمونه: اجرای ساده برنامه Quart با Hypercorn (برنامه‌ای)

from quart import Quart
from hypercorn.config import Config
from hypercorn.asyncio import serve
import asyncio

app = Quart(__name__)

@app.route('/')
async def hello():
    return 'Hello from Hypercorn and Quart!'

async def main():
    config = Config()
    config.bind = ["0.0.0.0:8000"]
    # config.workers = 4  # در صورت نیاز به چند پردازشی
    await serve(app, config)

if __name__ == '__main__':
    asyncio.run(main())

در این مثال، یک اپلیکیشن سادهٔ Quart ساخته‌ایم و سپس با استفاده از API برنامه‌ای Hypercorn آن را اجرا می‌کنیم. با تنظیم config.bind تعیین می‌کنیم سرور روی چه آدرسی گوش دهد. تابع serve از ماژول hypercorn.asyncio برای اجرای سرور در حلقهٔ رویداد asyncio فراخوانی می‌شود.

مثال CLI: اجرای یک اپ FastAPI یا Starlette

# فرض کنید اپ شما در فایل app.py و نام شیء ASGI برابر app است
# اجرای ساده از طریق ترمینال:
hypercorn -b 0.0.0.0:8000 app:app --reload --workers 2 --log-level debug

این دستور Hypercorn را روی پورت 8000 اجرا می‌کند، با فعال‌سازی reload برای توسعه، دو worker و سطح لاگینگ debug. گزینه‌ها قابل تغییر و گسترش هستند (مانند certfile برای TLS).

پیکربندی TLS و HTTP/2

from hypercorn.config import Config
from hypercorn.asyncio import serve
import asyncio
from quart import Quart

app = Quart(__name__)

async def main():
    config = Config()
    config.bind = ["0.0.0.0:443"]
    config.certfile = "/path/to/cert.pem"
    config.keyfile = "/path/to/key.pem"
    # HTTP/2 به طور پیش‌فرض در صورت وجود TLS فعال خواهد بود.
    await serve(app, config)

if __name__ == '__main__':
    asyncio.run(main())

در این کد TLS را با تعیین فایل گواهی و کلید فعال کرده‌ایم؛ در چنین حالتی Hypercorn می‌تواند HTTP/2 را ارائه کند. توجه داشته باشید که برای HTTP/3 معمولاً نیاز به نصب بسته‌های اضافی (مثلاً aioquic) و تنظیمات خاص دارید و وضعیت آن ممکن است آزمایشی باشد.

نکات پیشرفته و راهنمایی‌های عملیاتی

  • انتخاب مدل همزمانی — اگر از trio استفاده می‌کنید، از hypercorn.trio.serve بهره ببرید؛ اگر asyncio معمولی کافی است، از hypercorn.asyncio استفاده کنید.
  • چندپردازشی — برای استفاده از چندین هسته پردازشی از گزینه workers استفاده کنید یا Hypercorn را پشت یک فرآیند مدیریت‌گر مانند systemd یا سوپر وایزر قرار دهید.
  • مقیاس‌پذیری و معکوس‌کننده‌ها — اگر می‌خواهید TLS و HTTP/2 را با جزئیات بیشتر مدیریت کنید یا نیاز به load balancing دارید، معمولاً قرار دادن NGINX یا Traefik جلوی Hypercorn مفید است.
  • نکات امنیتی — به‌روزرسانی منظم، محدود کردن دسترسی به پورت‌ها، و استفاده از گواهی‌های معتبر توصیه می‌شود.

اشکال‌زدایی و بهینه‌سازی

برای اشکال‌زدایی، لاگ‌گیری با سطح debug یا info کمک می‌کند تا درخواست‌ها و خطاها را ببینید. اگر نیاز به بیشترین کارایی دارید، بنچمارک بزنید (ab، wrk یا ابزارهای مشابه) و گزینه‌های workers و تنظیمات keep-alive را بر اساس الگوی ترافیک خود تنظیم کنید.

نتیجه‌گیری و نکات پایانی

Hypercorn یک گزینهٔ قدرتمند و انعطاف‌پذیر برای اجرای اپلیکیشن‌های ASGI در پایتون است؛ به‌خصوص اگر به چند مدل همزمانی، HTTP/2 یا قابلیت اجرای برنامه‌ای نیاز دارید. برای پروژه‌های تولیدی، توصیه می‌شود پیکربندی‌ها را آزمایش، بنچمارک و با معکوس‌کننده‌های مناسب ترکیب کنید تا بهترین عملکرد و امنیت به دست آید.

برای اطلاعات بیشتر و لیست کامل گزینه‌ها به مستندات رسمی Hypercorn مراجعه کنید و پیش از استفاده از HTTP/3 یا ویژگی‌های آزمایشی، سازگاری با کتابخانه‌های سیستم خود را ارزیابی کنید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: