ホームページ >バックエンド開発 >Python チュートリアル >Pulsetracker、Laravel、Python を使用したリアルタイム位置追跡ソリューションの構築

Pulsetracker、Laravel、Python を使用したリアルタイム位置追跡ソリューションの構築

Barbara Streisand
Barbara Streisandオリジナル
2024-11-28 19:26:12495ブラウズ

はじめに: PulseTracker とは何ですか?

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 スクリプトから受信した位置データを処理します。

ステップ 1: 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 に渡すために継続的に実行する必要があります

ステップ 2: Laravel の構成

ここで、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

結果

Building a Real-Time Location Tracking Solution with Pulsetracker, Laravel, and Python

結論

この設定では、Python リスナーがリアルタイムの位置データを Pulsetracker から Redis キューに効率的にストリーミングし、Laravel がバックグラウンド ジョブとして処理します。このアプローチにより、Laravel がデータの永続化とバックエンドのタスクに集中できるようにしながら、大量のリアルタイム データを処理できるようになります。

リソース:
https://fly.io/laravel-bytes/queues-with-other-langages/

以上がPulsetracker、Laravel、Python を使用したリアルタイム位置追跡ソリューションの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。