برنامه نویسی

کاوش در ASGI: پروتکل Async پایتون برای برنامه های وب

شرح تصویر

Leapcell: بهترین پلتفرم بدون سرور برای میزبانی وب Python ، کارهای Async و Redis

درک Asgi و Uvicorn در توسعه Fastapi

هنگام توسعه با FastAPI ، باید از سرور UVICORN استفاده کنیم. ممکن است مبتدیان تعجب کنند که چرا. امروز ، ما به این سوال پاسخ خواهیم داد.

ماوراء بنفش

بیایید یک درخواست HTTP ساده را با استفاده از HTTP پیاده سازی کنیم:

import json

# Define a helper function to convert bytes in headers to strings
def convert_bytes_to_str(data):
    if isinstance(data, bytes):
        return data.decode('utf-8')
    if isinstance(data, tuple):
        return tuple(convert_bytes_to_str(item) for item in data)
    if isinstance(data, list):
        return [convert_bytes_to_str(item) for item in data]
    if isinstance(data, dict):
        return {key: convert_bytes_to_str(value) for key, value in data.items()}
    return data


async def app(scope, receive, send):
    # print(scope)
    data = convert_bytes_to_str(scope)
    print(json.dumps(data, indent=4))
    # Check the type of the request
    if scope['type'] == 'http':
        # Wait for the HTTP request body
        event = await receive()

        # Response content
        response_body = json.dumps({"message": "Hello, ASGI!"}).encode('utf-8')

        # Send the HTTP response headers
        await send({
            'type': 'http.response.start',
           'status': 200,
            'headers': [
                (b'content-type', b'application/json'),
            ],
        })

        # Send the HTTP response body
        await send({
            'type': 'http.response.body',
            'body': response_body,
        })
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در scope میدان شامل رشته های باینری است ، بنابراین ما به یک عملکرد تبدیل نیاز داریم convert_bytes_to_strبشر بیایید به طور خلاصه آن را تجزیه و تحلیل کنیم. اطلاعات مربوط به مسیر درخواست و روش در آن است scopeبشر پس از scope بیش از HTTP پشتیبانی می کند ، ما باید از آن استفاده کنیم type برای تعیین نوع پروتکل فعلی. سپس ، ما از receive عملکرد برای دریافت بدنه درخواست. در مرحله بعد ، ما یک بدن پاسخ با استفاده از آن ایجاد می کنیم json.dumps و آن را با رمزگذاری encodeبشر در آخر ، ما هدر درخواست و بدنه درخواست را ارسال می کنیم.

در اینجا ، داده ها را دو بار ارسال می کنیم. این طرح نیازهای برنامه نویسی ناهمزمان را برآورده می کند و توانایی پردازش را برای سناریوهای مختلف برنامه (پاسخ جریان) تقویت می کند. با درک پروژه های واقعی جهانی ، اکنون می توانیم ASGI را از یک مبنای نظری درک کنیم.

عیاشی

رابط دروازه سرور ناهمزمان (ASGI) یک پروتکل پایتون برای ساخت برنامه های وب ناهمزمان است.

ویژگی های اصلی ASGI

  • پشتیبانی ناهمزمان: برنامه نویسی ناهمزمان را امکان پذیر می کند.
  • پشتیبانی چند – پروتکل: از پروتکل هایی مانند WebSocket و نظرسنجی طولانی پشتیبانی می کند ، به این معنی که از HTTP/HTTPS/WebSocket پشتیبانی می کند.
  • پشتیبانی همزمان: می تواند چندین درخواست را همزمان انجام دهد.
  • ارتباط: برنامه ها و سرورها و همچنین بخش های مختلف یک برنامه با ارسال و دریافت پیام در تعامل هستند.

ترکیب پروتکل ASGI

  • رابط کاربردی

    • رابط کاربردی ASGI نحوه تعامل یک برنامه با سرور ASGI را مشخص می کند. یک برنامه ASGI یک شیء قابل تماس ، معمولاً یک عملکرد ناهمزمان است که دو پارامتر را می پذیرد: scope وت receive، و بازگشت send ژنراتور ناهمزمان.
      • دامنه: یک فرهنگ لغت حاوی اطلاعات در مورد درخواست ، مانند نوع درخواست (HTTP یا WebSocket) ، مسیر ، رشته پرس و جو ، اطلاعات سرور و غیره.
      • دریافت کردن: یک تماس ناهمزمان که برای دریافت رویدادها از سرور ASGI استفاده می شود.
      • ارسال کردن: یک ژنراتور ناهمزمان که برای ارسال رویدادها به سرور ASGI استفاده می شود.
  • رابط سرور

    • مسئولیت های اصلی رابط سرور شامل موارد زیر است:
      • پذیرش ارتباط از مشتری.
      • ایجاد a scope برای هر اتصال
      • فراخوانی receive وت send روش های برنامه برای عبور از رویدادها.
      • رسیدگی به استثنائات شبکه و بستن اتصالات.
  • رابط حلقه رویداد

    • رابط حلقه رویداد بخشی ضمنی از پروتکل ASGI است. این توسط سرور ASGI به جای تعریف مستقیم توسط پروتکل ASGI اداره می شود.
    • حلقه رویداد وظیفه برنامه ریزی و اجرای کارهای ناهمزمان را بر عهده دارد ، که هسته اصلی برنامه نویسی ناهمزمان است. عملکردهای اصلی آن شامل موارد زیر است:
      • در حال اجرا و برنامه ریزی کارهای ناهمزمان.
      • مدیریت عملیات I/O ناهمزمان ، مانند درخواست های شبکه.
      • رسیدگی به توابع پاسخ به تماس و ژنراتورهای ناهمزمان.
    • در ASGI ، حلقه رویداد معمولاً توسط کتابخانه های پایتون زیر ارائه می شود:
      • بی پروا: یک چارچوب I/O ناهمزمان در کتابخانه استاندارد پایتون.
      • uvloop: یک حلقه رویداد ناهمزمان بر اساس libuv، اغلب با سرور UVICORN استفاده می شود.

سرورها و برنامه های ASGI برای انجام عملیات ناهمزمان به حلقه رویداد متکی هستند و این امکان را به آنها می دهد تا تعداد زیادی از اتصالات همزمان را به طور مؤثر اداره کنند.

وقایع ASI

مدل ASGI – مدل محور مدیریت چرخه عمر (راه اندازی و خاموش کردن) ، HTTP درخواست کار و مدیریت اتصال WebSocket را کنترل می کند. از طریق انواع مختلف رویدادها ، توسعه دهندگان می توانند اتصالات و جریان داده ها را دقیقاً کنترل کنند تا به پردازش ناهمزمان و همزمان دست یابند.

  • وقایع طول عمر

    • وقایع طول عمر مربوط به چرخه های راه اندازی و خاموش کردن یک برنامه ASGI است. آنها به طور معمول برای انجام کارهای اولیه سازی و پاکسازی استفاده می شوند.
      • Sifespan.Startup
      • Sifespan.Shutdown
  • رویدادهای HTTP

    • رسیدگی به درخواست های HTTP ASGI به چندین رویداد تقسیم می شود و امکان مدیریت جزئیات هر درخواست HTTP را فراهم می کند.
      • http.request
      • http.response.start
      • http.response.body
      • http.disconnect
      • websocket.send
  • رویدادهای WebSocket

    • ASGI از اتصالات WebSocket پشتیبانی می کند و ارتباط دو راه را امکان پذیر می کند.
      • websocket.connect
      • WebSocket.Receive

چرخه عمر ASGI

چرخه عمر برنامه ASGI به مراحل مربوط به برنامه در هنگام راه اندازی و خاموش شدن اشاره دارد. این توسط کانال رویداد Lifespan اداره می شود.

  • scope['type']: lifespan
  • message['type']: پیام برای راه اندازی و خاموش کردن: lifespan.startup/lifespan.shutdown
  • ارسال نوع: {'type': 'lifespan.shutdown.complete'}

چرخه عمر ASGI به دو بخش تقسیم می شود: راه اندازی و خاموش کردن برنامه و ایجاد ، پردازش ، پاسخ و خاموش کردن درخواست ها.

uvicorn و لایه برنامه

همانطور که قبلاً ذکر شد ، UVicorn لایه سرور ASGI را پیاده سازی می کند. با این حال ، در لایه برنامه خیلی دوستانه نیست زیرا سطح آن بسیار پایین است. بنابراین ، بسیاری از چارچوب های سطح بالاتر پدید آمده اند:

  • ستاره: یک چارچوب/ابزار سبک ASGI سبک برای ساخت خدمات وب با عملکرد بالا. این یک مؤلفه اصلی FastAPI است و همچنین می تواند به طور مستقل برای ایجاد برنامه های وب ساده استفاده شود.
  • فریپی: یک چارچوب وب مدرن ، سریع (با عملکرد بالا) برای ساخت API ، که با نکات نوع Python 3.6+ استفاده می شود. این بنا بر اساس نکات نوع Python Starlette و استاندارد است و اعتبار سنجی و سریال سازی خودکار داده ها و همچنین تولید اسناد API تعاملی را ارائه می دهد.

در اینجا نیازی به توضیح در مورد جنبه های دیگر نیست. اطلاعات بیش از حد ممکن است بسیار زیاد باشد. uvicorn نیاز به app، بنابراین برای این دو چارچوب ، شیء فوری است appبشر سپس ، ما از Uvicorn CLI برای شروع برنامه استفاده می کنیم:

uvicorn main:app --reload
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

خلاصه

این مقاله به طور عمده به بررسی پروتکل ASGI Python Web ASGI از طریق UVicorn می پردازد. ASGI رابط سرور سرور ناهمزمان پایتون است که قابلیت های ناهمزمان ، همزمان و چند پروتکل برنامه های وب پایتون مدرن را ادغام می کند.

شرح تصویر

سرانجام ، من یک سکوی را توصیه می کنم که برای استقرار پروژه های پایتون مناسب باشد: Leapcell

1. پشتیبانی چند – زبان

  • با JavaScript ، Python ، Go یا Rust توسعه دهید.

5. پروژه های نامحدود را به صورت رایگان مستقر کنید

  • فقط برای استفاده پرداخت کنید – بدون درخواست ، بدون هزینه.

3. راندمان هزینه بی نظیر

  • پرداخت – به عنوان – شما – بدون هزینه بیکار بروید.
  • مثال: 25 دلار از درخواست های 6.94M در زمان پاسخ متوسط ​​60ms پشتیبانی می کند.

4. تجربه توسعه دهنده ساده

  • UI بصری برای راه اندازی بی دردسر.
  • خطوط لوله CI/CD کاملاً خودکار و ادغام GITOPS.
  • معیارهای واقعی – زمان و ورود به سیستم برای بینش های عملی.

5. مقیاس پذیری بی دردسر و عملکرد بالا

  • خودکار – مقیاس گذاری برای رسیدگی به همزمانی بالا با سهولت.
  • صفر سربار عملیاتی – فقط روی ساختمان تمرکز کنید.

شرح تصویر

در اسناد بیشتر کاوش کنید!

توییتر Leapcell: https://x.com/leapcellhq

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا