যখন আমরা আমাদের django app থেকে সাধারণ রিকোয়েস্ট দেই তখন সেটা wsgi সিস্টেম এ এইচটিটিপি রিকোয়েস্ট পাঠায় যা রিকোয়েস্ট গ্রহণ করে তার প্রেক্ষিতে রেসপন্স দেয় এবং কানেকশন টি ক্লোজ করে দেয় পরে আবার ডেটা দরকার হলে আবার কানেকশন তৈরী করতে হয় আর asgi সিস্টেম এ একবার কানেকশন হলে পরে রিয়েল টাইম ডাটা দেখা যায় যেমনটা আমরা চ্যাট এপ্লিকেশন ও বিভিন্ন স্টক মার্কেট এর এক্সচেঞ্জ ভ্যালু ড্যাশবোর্ড দেখতে পাই।
সাধারণ ভাবে আমরা django এর wsgi সিস্টেম এ view.py এর মাদ্ধমে রিকোয়েস্ট লেনদেন করি কিন্তু asgi সিস্টেম এ consumer এর মাদ্ধমে সেটা করতে হবে
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>