কনফিগার

যখন আমরা আমাদের django app থেকে সাধারণ রিকোয়েস্ট দেই তখন সেটা wsgi সিস্টেম এ এইচটিটিপি রিকোয়েস্ট পাঠায় যা রিকোয়েস্ট গ্রহণ করে তার প্রেক্ষিতে রেসপন্স দেয় এবং কানেকশন টি ক্লোজ করে দেয় পরে আবার ডেটা দরকার হলে আবার কানেকশন তৈরী করতে হয় আর asgi সিস্টেম এ একবার কানেকশন হলে পরে রিয়েল টাইম ডাটা দেখা যায় যেমনটা আমরা চ্যাট এপ্লিকেশন ও বিভিন্ন স্টক মার্কেট এর এক্সচেঞ্জ ভ্যালু ড্যাশবোর্ড দেখতে পাই।

সাধারণ ভাবে আমরা django এর wsgi সিস্টেম এ view.py এর মাদ্ধমে রিকোয়েস্ট লেনদেন করি কিন্তু asgi সিস্টেম এ consumer এর মাদ্ধমে সেটা করতে হবে

settings.py ফাইলের শেষে নিচের কনফিগার করি

# For Development 
# CHANNEL_LAYERS = {
#     "default": {
#         "BACKEND": "channels_redis.core.RedisChannelLayer",
#         "CONFIG": {
#             "hosts": [("localhost", 6379)],
#         },
#     },
# }


# for windows
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels.layers.InMemoryChannelLayer"
    }
}
ASGI_APPLICATION = "ChatApplication.asgi.application"

asgi.py

import os
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application

from chat.routing import websocket_urlpatterns

application = ProtocolTypeRouter({
    'http': get_asgi_application(),
    'websocket': URLRouter(websocket_urlpatterns),
})

routing.py

from channels.routing import ProtocolTypeRouter, URLRouter, re_path

from .consumers import RandomNumberGeneratorConsumer

websocket_urlpatterns = [
    URLRouter([
        re_path('ws/index/', RandomNumberGeneratorConsumer.as_asgi()),
    ]),
]

consumers.py

import json
from channels.generic.websocket import AsyncWebsocketConsumer

class RandomNumberGeneratorConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        await self.accept()

    async def receive(self, text_data=None, bytes_data=None):
        # Generate a new random number
        random_number = random.random()

        # Send the random number to the client
        await self.send(json.dumps({'random_number': random_number}))

    async def disconnect(self, close_code):
        pass

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Random Number Generator</title>
</head>
<body>
    <h1>Random Number Generator</h1>

    <p id="random-number">{{ random_number }}</p>

    <script>
        var socket = new WebSocket('ws://localhost:8000/ws/random-number/');

        socket.onmessage = function(event) {
            var data = JSON.parse(event.data);

            document.getElementById('random-number').innerHTML = data.random_number;
        };
    </script>
</body>
</html>

Last updated