وب سوکت در کنار پروتکل http
03 Khordad 1401
0 نظر
74 : 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 پشتیبانی میشه هم از وب سوکت.

None

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

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

Activity Logs

There are 2 new tasks for you in “AirPlus Mobile APp” project:
Added at 4:23 PM by
img
Meeting with customer
Application Design
img
img
A
In Progress
View
Project Delivery Preparation
CRM System Development
img
B
Completed
View
Invitation for crafting engaging designs that speak human workshop
Sent at 4:23 PM by
img
Task #45890merged with #45890in “Ads Pro Admin Dashboard project:
Initiated at 4:23 PM by
img
3 new application design concepts added:
Created at 4:23 PM by
img
New case #67890is assigned to you in Multi-platform Database Design project
Added at 4:23 PM by
Alice Tan
You have received a new order:
Placed at 5:05 AM by
img

Database Backup Process Completed!

Login into Admin Dashboard to make sure the data integrity is OK
Proceed
New order #67890is placed for Workshow Planning & Budget Estimation
Placed at 4:23 PM by
Jimmy Bold
سبد خرید