ホームページ >バックエンド開発 >Python チュートリアル >Pulsetracker、Laravel、Python を使用したリアルタイム位置追跡ソリューションの構築
Pulsetracker は、リアルタイムの位置追跡のためのバックエンド サービスであり、独自の SDK やインフラストラクチャに縛られずに位置データを監視するための堅牢かつ柔軟な方法を必要とする開発者向けに特別に設計されています。これにより、開発者は UDP または WebSocket プロトコルを使用して独自のクライアント SDK を実装できます。さらに、Pulsetracker はリアルタイムの位置情報更新を開発者のバックエンドに直接送信できるため、リアルタイム追跡を必要とするアプリケーションにとって強力な選択肢となります。
このチュートリアルでは、リアルタイムの位置情報更新のリスナーとして Python スクリプトを使用して Pulsetracker を使用する方法を説明します。 Python スクリプトは、更新を受信し、Redis 経由で Laravel ジョブ ハンドラーにディスパッチする Pulsetracker リスナーとして機能し、Laravel がこれらの更新を効率的に処理できるようにします。
1.Pulsetracker アカウント: Pulsetracker アカウントをセットアップし、アプリ キーと認証トークンを取得します。
2.Redis: Redis がインストールされ、実行されていることを確認します。
3.Laravel プロジェクト: Laravel プロジェクトをまだお持ちでない場合はセットアップします。
このセットアップには 2 つの主要コンポーネントが含まれます:
1.Python スクリプト: Pulsetracker からの位置情報の更新をリッスンします。
2.Laravel ジョブ: Python スクリプトから受信した位置データを処理します。
Python スクリプトは Pulsetracker の Pusher サービスに接続し、位置情報の更新をリッスンして、Laravel が処理できるように Redis キューにプッシュします。
#!/usr/bin/env python import sys sys.path.append('..') import pysher import time import logging import redis import json import uuid global pusher global redis def channel_callback(data): messageBody = json.dumps({ "uuid": str(uuid.uuid4()), "displayName": "App\Jobs\PulseLocationUpdatedJob", "job": "App\Jobs\PulseLocationUpdatedJob@handle", "data": json.loads(data), "maxTries": 0, "attempts": 0 }) # YOUR_APP_NAME_database_queues:QUEUE_NAME redis.rpush("pulsetracker_database_queues:geopulse", messageBody) def connect_handler(data): channel = pusher.subscribe("private-apps.<your_app_id>") channel.bind('App\Events\DeviceLocationUpdated', channel_callback) if __name__ == '__main__': appkey = "<pusher_app_key_in_our_documentation>" auth_endpoint = "https://www.pulsestracker.com/api/broadcasting/auth" pusher = pysher.Pusher( key=appkey, auth_endpoint_headers={ "Authorization": "Bearer <your_token>" }, auth_endpoint=auth_endpoint, custom_host="pusher.pulsestracker.com", secure=True, ) redis = redis.Redis(host='127.0.0.1', port=6379, db=0, password="<your_redis_password>") pusher.connection.ping_interval = 30 pusher.connect() pusher.connection.bind('pusher:connection_established', connect_handler) while True: time.sleep(1)
このスクリプトでは:
channel_callback 関数は、位置情報の更新を Redis キューにプッシュします。
connect_handler 関数は、特定の Pulsetracker チャネルをサブスクライブし、それを DeviceLocationUpdated イベントにバインドします。
このスクリプトは、更新をリッスンして Laravel の Redis に渡すために継続的に実行する必要があります
ここで、Python スクリプトから受け取った更新を処理する Laravel ジョブ クラスを作成しましょう。
Laravel ジョブ: PulseLocationUpdatedJob
Laravel では、ジョブ クラスは、Python リスナーによって Redis キューにプッシュされたデータを処理します。 PulseLocationUpdatedJob クラスは次のとおりです:
<?php namespace App\Jobs; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Queue\Queueable; class PulseLocationUpdatedJob implements ShouldQueue { use Queueable; /** * Create a new job instance. */ public function __construct() { // } /** * Execute the job. */ public function handle($job, array $data) { // Handle the data here, e.g., save to the database var_dump($data); return $job->delete(); } }
Laravel キューワーカーを起動してジョブの処理を開始します:
php artisan queue:work --queue=geopulse
この設定では、Python リスナーがリアルタイムの位置データを Pulsetracker から Redis キューに効率的にストリーミングし、Laravel がバックグラウンド ジョブとして処理します。このアプローチにより、Laravel がデータの永続化とバックエンドのタスクに集中できるようにしながら、大量のリアルタイム データを処理できるようになります。
リソース:
https://fly.io/laravel-bytes/queues-with-other-langages/
以上がPulsetracker、Laravel、Python を使用したリアルタイム位置追跡ソリューションの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。