وب سوکت در کنار پروتکل http جنگو
03 Khordad 1402
0 نظر
75 : 2
وب سوکت در کنار پروتکل http

​ در این مقاله قراره یاد بگیریم که چجوری پروژه خودمون رو کانفیگ کنیم که هم از پروتکل http استفاده کنه هم از وب سوکت. اقدام به نصب پکیج زیر کنید. channels سپس در مسیر نام پروژه / اپی که جنگو بصورت خودکار و هم نام با نام پروژه ایجاد میکنه (my_app/my_app)  فایل wsgi.py رو باز کنید. """ WSGI config for candy_code project. It exposes the WSGI callable as a module-level variable named ``application``. For more information on this file, see https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/ """ import os from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'candy_code.settings') application = get_wsgi_application() که به شکل بالا نوشته شده. ما قراره کد های این فایل رو تغییر بدیم تا بتونیم هم درخواست های http رو پشتیبانی کنیم هم وب سوکت رو پس کدمون رو به شکل زیر مینویسیم. import os from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter from django.core.asgi import get_asgi_application import chats.routing os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'abra.settings') application = ProtocolTypeRouter({ "http": get_asgi_application(), 'websocket': AuthMiddlewareStack( URLRouter( chats.routing.websocket_urlpatterns ) ), }) نوشتن این قطعه "http": get_asgi_application() اهمیت نداره چون در صورتی که ننویسیمش هم باز جنگو این پروتکل رو در نظر میگیره. تفاوت wsgi با asgi اینکه asgi از متد های async که در وب سوکت (حالت ریل تایم ) هست هم پشتیبانی میکنه. خب چیزی که ما نوشتیم باعث شد که دیگه بتونیم از وب سوکت ها هم پشتیبانی کنیم و اگر درخواستی براشون اومد دیگه قابل شناساییه و اما کلاس  AuthMiddlewareStack به ما امکان بررسی وضعیت کار بر رو میده و درصورت تمایل میتونیم میدلور های شخصی خودمون هم بنویسیم و اینجا ازش استفاده کنیم. در انتها لازمه به فایل setting.py بریم و برنامه رو از تغیرات که دادیم با خبر کنیم. بصورت پیش فرض در فایل settings.py مقدار WSGI_APPLICATION = 'abra.wsgi.application' وجود داره ولی لازمه که اون رو به مقدار زیر تغیر بدیم. ASGI_APPLICATION = "abra.wsgi.application" نکته ای که وجود داره اینه که میتونیم دستی به WSGI_APPLICATION نزنیم چون وقتی ASGI_APPLICATION رو اضافه کنیم جنگو بطور خودکار از WSGI_APPLICATION صرف نظر میکنه و میره سراغ ASGI_APPLICATION چون در ASGI_APPLICATION هم از پروتکل http پشتیبانی میشه هم از وب سوکت. ​

چند قدم در چند راه

ابتدا وارد شوید یا ثبت نام کنید!

برای ثبت نظر، نقد ابتدا باید وارد شوید یا ثبت نام کنید.
سبد خرید