وبسوکت (WebSocket) یک فناوری ارتباطی در وب است که به سرور و مرورگر اجازه میدهد از طریق یک اتصال دوطرفه دائمی، دادهها را به صورت تعاملی ارسال و دریافت کنند. در واقع مرورگر میتواند دادهها را بفرستد و دریافت کند بدون اینکه نیازی به بارگیری دوباره صفحه وب (refresh) باشد. این ویژگی به برنامههای تعاملی مانند چتهای زنده و بازیهای آنلاین کمک میکند.
در ادامه، به نحوه ایجاد برنامه WebSocket در فریمورک Django با استفاده از ماژول channels و همچنین نحوه استقرار آن در لیارا، پرداخته شده است.
ساخت برنامه WebSocket در Django
پروژه در پیشرو، یک چتروم تحت وب در فریمورک Django است که کاربران میتوانند در آن به صورت Realtime (با تکیه بر WebSocket) به گفتگو بپردازند.
در ابتدا، بایستی در محیط مجازی، با اجرای دستور زیر، یک پروژه جدید Django را، ایجاد کنید:
کپی
django-admin startproject ChatApp
پس از اجرای دستور فوق، کافیست تا دستور زیر را اجرا کنید تا ماژولهای channels و daphne برایتان نصب شود:
کپی
pip install channels daphne
حال، بایستی با استفاده از دستور زیر، یک application جدید به نام chat در پروژه ایجاد کنید:
کپی
python manage.py startapp chat
پس از اجرای دستورات فوق، کافیست تا برنامه chat و ماژولهای channels و daphne را به INSTALLED_APPS در فایل settings.py به شکل زیر، اضافه کنید:
اکنون، باید قطعه کد زیر را در chat/routing.py قرار دهید:
کپی
from django.urls import path , include
from chat.consumers import ChatConsumer
# Here, "" is routing to the URL ChatConsumer which
# will handle the chat functionality.
websocket_urlpatterns = [
path("" , ChatConsumer.as_asgi()) ,
]
و همچنین در chat/consumers.py قطعه کد زیر را قرار دهید:
در نظر داشته باشید که قطعه کد فوق، مناسب محیط توسعه است و برای استفاده در محیط Production، بهتر است از Redis Channels استفاده کنید. در ادامه، نحوه استفاده از Redis Channels در برنامههای جنگو، آموزش داده شده است.
در نهایت، قطعه کد زیر را به انتهای فایل settings.py اضافه کنید:
تمام کارها انجام شده است و اکنون میتوانید با استفاده از دستور زیر؛ کاربران مدنظر خود را ایجاد کنید تا در چتروم، با یکدیگر تعامل داشته باشند:
کپی
python manage.py createsuperuser
در انتها، با استفاده از دستور زیر، میتوانید برنامه را اجرا و استفاده کنید:
کپی
python manage.py runserver
کپی
استقرار برنامه Django WebSocket در لیارا
برای استقرار برنامههای وبسوکت جنگو در لیارا، نیازی به انجام تغییر خاصی نیست. صرفاً باید به جای استفاده از آدرس ws، عبارت wss را به کار ببرید تا اتصال، ایمن و سازگار باشد. همچنین، در فایل settings.py باید قطعه کد زیر را حذف کنید:
کپی
WSGI_APPLICATION = 'ChatApp.wsgi.application'
و به جای آن، از قطعه کد زیر استفاده کنید:
کپی
ASGI_APPLICATION = 'ChatApp.asgi.application'
مقدار متغیرهای فوق وابسته به نام پروژه، متغیر هستند و این مقدار در اینجا، یک مثال برای پروژهای به نام ChatApp میباشد.
از آنجایی که استفاده از InMemoryChannelLayer در حالت Production، احتمال نشت دادهها را بسیار افزایش میدهد؛ پس بهتر است به جای آن، از Redis Channels استفاده کنید. برای این کار نیز، کافیست تا در ابتدا ماژول channels-redis در پروژه خود، نصب کنید:
کپی
pip install channels-redis
پس از نصب ماژول فوق، کافیست تا قطعه کد زیر را از فایل settings.py حذف کنید: