Rumah >pembangunan bahagian belakang >Tutorial Python >Bina Sistem Penjejakan Lokasi Dinamik di Django dengan Redis Pub/Sub dan Pulsetracker
Dalam artikel ini, kami akan menunjukkan cara untuk menyepadukan Pub/Sub Redis Pulsetracker ke dalam aplikasi Django untuk mendengar kemas kini lokasi masa nyata. Selain itu, kami akan membina klien WebSocket JavaScript yang mudah untuk menghantar kemas kini lokasi setiap saat kepada Pulsetracker, mempamerkan cara perkhidmatan itu boleh digunakan dalam aplikasi dunia sebenar.
Django ialah rangka kerja web Python peringkat tinggi yang menggalakkan pembangunan pesat dan reka bentuk yang bersih dan pragmatik. Ia terkenal dengan kebolehskalaan, keselamatan dan ekosistem alatan yang kaya yang menjadikan membina aplikasi web yang teguh lebih pantas dan mudah.
Ciri Redis Pub/Sub Pulsetracker disepadukan dengan lancar dengan Django, membolehkan pembangun menerima dan memproses data lokasi masa nyata dengan cekap.
1. Pasang Pakej Yang Diperlukan
Mula-mula, pasang sokongan Redis untuk Django:
pip install django-redis pip install redis
2. Konfigurasikan Redis dalam Django
Kemas kini fail settings.py anda untuk memasukkan sambungan Pulsetracker Redis:
# settings.py from decouple import config # Recommended for managing environment variables # Redis settings PULSETRACKER_REDIS_URL = config('PULSETRACKER_REDIS_URL', default='redis://redis-sub.pulsestracker.com:6378')
3. Buat Perintah Pengurusan untuk Pelanggan
Arahan pengurusan Django ialah cara terbaik untuk mengendalikan tugas latar belakang yang telah lama dijalankan.
Buat perintah tersuai baharu dalam apl Django anda:
python manage.py startapp tracker
Di dalam apl anda, cipta folder dan struktur fail berikut:
tracker/ management/ commands/ subscribe_pulsetracker.py
Berikut ialah kod untuk subscribe_pulsetracker.py:
import redis import hashlib import hmac from django.core.management.base import BaseCommand class Command(BaseCommand): help = "Subscribe to Pulsetracker Redis Pub/Sub server" def generate_signature(self, app_key, token): if "|" not in token: raise ValueError("Invalid token format") token_hash = hashlib.sha256(token.split("|")[1].encode()).hexdigest() return hmac.new(token_hash.encode(), app_key.encode(), hashlib.sha256).hexdigest() def handle(self, *args, **options): app_key = 'your_app_key_here' token = 'your_token_here' signature = self.generate_signature(app_key, token) channel = f"app:{app_key}.{signature}" redis_connection = redis.StrictRedis.from_url('redis://redis-sub.pulsestracker.com:6378') print(f"Subscribed to {channel}") pubsub = redis_connection.pubsub() pubsub.subscribe(channel) for message in pubsub.listen(): if message['type'] == 'message': print(f"Received: {message['data'].decode('utf-8')}")
Jalankan pelanggan dengan:
python manage.py subscribe_pulsetracker
Untuk memastikan pelanggan berjalan secara berterusan dalam pengeluaran, gunakan pengurus proses seperti Penyelia atau Django-Q.
Pasang Django-Q:
pip install django-q
Kemas kini tetapan.py:
# settings.py Q_CLUSTER = { 'name': 'Django-Q', 'workers': 4, 'recycle': 500, 'timeout': 60, 'redis': { 'host': 'redis-sub.pulsestracker.com', 'port': 6378, 'db': 0, } }
Buat tugasan untuk mendengar kemas kini Pulsetracker dalam tasks.py:
from django_q.tasks import async_task import redis def pulsetracker_subscribe(): app_key = 'your_app_key_here' token = 'your_token_here' channel = f"app:{app_key}.{generate_signature(app_key, token)}" redis_connection = redis.StrictRedis.from_url('redis://redis-sub.pulsestracker.com:6378') pubsub = redis_connection.pubsub() pubsub.subscribe(channel) for message in pubsub.listen(): if message['type'] == 'message': print(f"Received: {message['data'].decode('utf-8')}")
Berikut ialah klien JavaScript mudah yang mensimulasikan kemas kini lokasi peranti yang dihantar kepada Pulsetracker melalui WebSockets:
var wsServer = 'wss://ws-tracking.pulsestracker.com'; var websocket = new WebSocket(wsServer); const appId = 'YOUR_APP_KEY'; const clientId = 'YOUR_CLIENT_KEY'; websocket.onopen = function(evt) { console.log("Connected to WebSocket server."); // Send location every 2 seconds setInterval(() => { if (websocket.readyState === WebSocket.OPEN) { navigator.geolocation.getCurrentPosition((position) => { console.log(position); const locationData = { appId: appId, clientId: clientId, data: { type: "Point", coordinates: [position.coords.longitude, position.coords.latitude] }, extra: { key: "value" } }; // Send location data as JSON websocket.send(JSON.stringify(locationData)); console.log('Location sent:', locationData); }, (error) => { console.error('Error getting location:', error); }); } }, 3000); // Every 2 seconds }; websocket.onclose = function(evt) { console.log("Disconnected"); }; websocket.onmessage = function(evt) { if (event.data === 'Pong') { console.log('Received Pong from server'); } else { // Handle other messages console.log('Received:', event.data); } }; websocket.onerror = function(evt, e) { console.log('Error occurred: ' + evt.data); };
Pulsetracker, digabungkan dengan Django dan Redis Pub/Sub, menawarkan penyelesaian yang mantap untuk penjejakan lokasi masa nyata. Penyepaduan ini membolehkan pembangun membina sistem berskala, sedia pengeluaran yang cekap mengendalikan data lokasi langsung. Penambahan pelanggan WebSocket menunjukkan betapa mudahnya Pulsetracker boleh disepadukan ke dalam aplikasi bahagian hadapan, meningkatkan pengalaman pengguna.
Cuba laksanakan Pulsetracker dalam projek Django anda hari ini dan kongsi pengalaman anda! Untuk maklumat lanjut, lawati dokumentasi Pulsetracker.
Atas ialah kandungan terperinci Bina Sistem Penjejakan Lokasi Dinamik di Django dengan Redis Pub/Sub dan Pulsetracker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!