ホームページ > バックエンド開発 > Python チュートリアル > Redis Pub/Sub と Pulsetracker を使用して Django で動的位置追跡システムを構築する

Redis Pub/Sub と Pulsetracker を使用して Django で動的位置追跡システムを構築する

Linda Hamilton
リリース: 2024-12-15 02:30:10
オリジナル
268 人が閲覧しました

Build Dynamic Location Tracking Systems in Django with Redis Pub/Sub and Pulsetracker

この記事では、Pulsetracker の Redis Pub/Sub を Django アプリケーションに統合して、リアルタイムの位置情報の更新をリッスンする方法を説明します。さらに、位置情報の更新を毎秒 Pulsetracker に送信するためのシンプルな JavaScript WebSocket クライアントを構築し、サービスが実際のアプリケーションでどのように利用できるかを紹介します。


なぜジャンゴなのか?

Django は、迅速な開発とクリーンで実用的な設計を促進する高レベルの Python Web フレームワークです。スケーラビリティ、セキュリティ、そして堅牢な Web アプリケーションをより速く簡単に構築できるツールの豊富なエコシステムで知られています。

Pulsetracker の Redis Pub/Sub 機能は Django とシームレスに統合されており、開発者はリアルタイムの位置データを効率的に受信して処理できます。


Django での Redis Pub/Sub のセットアップ

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
ログイン後にコピー

実稼働環境でサブスクライバーが継続的に実行されるようにするには、SupervisorDjango-Q などのプロセス マネージャーを使用します。


バックグラウンド タスクに 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 クライアントの例

これは、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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート