ホームページ >バックエンド開発 >Python チュートリアル >Redis Pub/Sub と Pulsetracker を使用して Django で動的位置追跡システムを構築する
この記事では、Pulsetracker の Redis Pub/Sub を Django アプリケーションに統合して、リアルタイムの位置情報の更新をリッスンする方法を説明します。さらに、位置情報の更新を毎秒 Pulsetracker に送信するためのシンプルな JavaScript WebSocket クライアントを構築し、サービスが実際のアプリケーションでどのように利用できるかを紹介します。
Django は、迅速な開発とクリーンで実用的な設計を促進する高レベルの Python Web フレームワークです。スケーラビリティ、セキュリティ、そして堅牢な Web アプリケーションをより速く簡単に構築できるツールの豊富なエコシステムで知られています。
Pulsetracker の Redis Pub/Sub 機能は Django とシームレスに統合されており、開発者はリアルタイムの位置データを効率的に受信して処理できます。
1.必要なパッケージをインストールします
まず、Django の Redis サポートをインストールします。
pip install django-redis pip install redis
2. Django で Redis を構成する
settings.py ファイルを更新して、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.サブスクライバの管理コマンドを作成します
Django 管理コマンドは、長時間実行されるバックグラウンド タスクを処理する優れた方法です。
Django アプリで新しいカスタム コマンドを作成します:
python manage.py startapp tracker
アプリ内に次のフォルダーとファイル構造を作成します:
tracker/ management/ commands/ subscribe_pulsetracker.py
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')}")
次のコマンドでサブスクライバを実行します。
python manage.py subscribe_pulsetracker
実稼働環境でサブスクライバーが継続的に実行されるようにするには、Supervisor や Django-Q などのプロセス マネージャーを使用します。
Django-Q をインストールします:
pip install django-q
settings.py を更新します:
# settings.py Q_CLUSTER = { 'name': 'Django-Q', 'workers': 4, 'recycle': 500, 'timeout': 60, 'redis': { 'host': 'redis-sub.pulsestracker.com', 'port': 6378, 'db': 0, } }
tasks.py で Pulsetracker の更新をリッスンするタスクを作成します:
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')}")
これは、WebSocket 経由で Pulsetracker に送信されるデバイスの位置情報の更新をシミュレートする単純な JavaScript クライアントです。
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 は、Django および Redis Pub/Sub と組み合わせることで、リアルタイムの位置追跡のための堅牢なソリューションを提供します。この統合により、開発者はライブ位置データを効率的に処理する、スケーラブルで実稼働対応のシステムを構築できます。 WebSocket クライアントの追加は、Pulsetracker がフロントエンド アプリケーションにいかに簡単に統合でき、ユーザー エクスペリエンスを向上できるかを示しています。
今すぐ Django プロジェクトに Pulsetracker を実装してみて、その経験を共有してください。詳細については、Pulsetracker のドキュメントを参照してください。
以上がRedis Pub/Sub と Pulsetracker を使用して Django で動的位置追跡システムを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。