Heim > Backend-Entwicklung > Python-Tutorial > Aufbau einer Echtzeit-Standortverfolgungslösung mit Pulsetracker, Laravel und Python

Aufbau einer Echtzeit-Standortverfolgungslösung mit Pulsetracker, Laravel und Python

Barbara Streisand
Freigeben: 2024-11-28 19:26:12
Original
554 Leute haben es durchsucht

Einführung: Was ist PulseTracker?

Pulsetracker ist ein Backend-Dienst zur Standortverfolgung in Echtzeit, der speziell für Entwickler entwickelt wurde, die eine robuste und flexible Möglichkeit zur Überwachung von Standortdaten benötigen, ohne an proprietäre SDKs oder Infrastruktur gebunden zu sein. Es ermöglicht Entwicklern, ihre eigenen Client-SDKs mithilfe von UDP- oder WebSocket-Protokollen zu implementieren. Darüber hinaus kann Pulsetracker Standortaktualisierungen in Echtzeit direkt an das Backend des Entwicklers senden, was es zu einer leistungsstarken Wahl für Anwendungen macht, die eine Echtzeitverfolgung erfordern.

In diesem Tutorial führen wir die Verwendung von Pulsetracker mit einem Python-Skript als Listener für Standortaktualisierungen in Echtzeit durch. Das Python-Skript fungiert als Pulsetracker-Listener, der Aktualisierungen empfängt und diese über Redis an einen Laravel-Job-Handler weiterleitet, sodass Laravel diese Aktualisierungen effizient verarbeiten kann.

Voraussetzungen

1.Pulsetracker-Konto: Richten Sie ein Pulsetracker-Konto ein und erhalten Sie Ihren App-Schlüssel und Autorisierungstoken.

2.Redis: Stellen Sie sicher, dass Redis installiert ist und ausgeführt wird.

3.Laravel-Projekt: Richten Sie ein Laravel-Projekt ein, falls Sie noch keines haben.

Projekt-Setup

Dieses Setup umfasst zwei Hauptkomponenten:

1.Python-Skript: Hört auf Standortaktualisierungen von Pulsetracker.

2.Laravel-Job: Verarbeitet die vom Python-Skript empfangenen Standortdaten.

Schritt 1: Einrichten des Python-Skripts

Das Python-Skript stellt eine Verbindung zum Pusher-Dienst von Pulsetracker her, wartet auf Standortaktualisierungen und schiebt diese in eine Redis-Warteschlange, damit Laravel sie verarbeiten kann.

#!/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)

Nach dem Login kopieren

In diesem Skript:

Die Funktion „channel_callback“ verschiebt Standortaktualisierungen in eine Redis-Warteschlange.

Die connect_handler-Funktion abonniert einen bestimmten Pulsetracker-Kanal und bindet ihn an das DeviceLocationUpdated-Ereignis.

Dieses Skript sollte kontinuierlich ausgeführt werden, um auf Updates zu warten und diese an Redis für Laravel weiterzuleiten

Schritt 2: Laravel konfigurieren

Jetzt erstellen wir eine Laravel-Jobklasse, die die vom Python-Skript empfangenen Aktualisierungen verarbeitet.

Laravel-Job: PulseLocationUpdatedJob

In Laravel verarbeitet die Jobklasse Daten, die vom Python-Listener in die Redis-Warteschlange verschoben werden. Hier ist die Klasse 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();
    }
}

Nach dem Login kopieren

Starten Sie den Laravel-Warteschlangenarbeiter, um mit der Verarbeitung von Jobs zu beginnen:

php artisan queue:work --queue=geopulse
Nach dem Login kopieren

Ergebnisse

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

Abschluss

In diesem Setup streamt der Python-Listener effizient Echtzeit-Standortdaten von Pulsetracker an Ihre Redis-Warteschlange, die Laravel als Hintergrundjobs verarbeitet. Mit diesem Ansatz können Sie große Mengen an Echtzeitdaten verarbeiten, während sich Laravel auf Datenpersistenz und Backend-Aufgaben konzentrieren kann.

Ressourcen:
https://fly.io/laravel-bytes/queues-with-other-linguals/

Das obige ist der detaillierte Inhalt vonAufbau einer Echtzeit-Standortverfolgungslösung mit Pulsetracker, Laravel und Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage