Rumah >pembangunan bahagian belakang >Tutorial Python >Membina Penyelesaian Penjejakan Lokasi Masa Nyata dengan Pulsetracker, Laravel dan Python

Membina Penyelesaian Penjejakan Lokasi Masa Nyata dengan Pulsetracker, Laravel dan Python

Barbara Streisand
Barbara Streisandasal
2024-11-28 19:26:12514semak imbas

Pengenalan: Apakah itu PulseTracker?

Pulsetracker ialah perkhidmatan bahagian belakang untuk penjejakan lokasi masa nyata, direka khusus untuk pembangun yang memerlukan cara yang teguh dan fleksibel untuk memantau data lokasi tanpa terikat dengan SDK atau infrastruktur proprietari. Ia membolehkan pembangun melaksanakan SDK klien mereka sendiri menggunakan sama ada protokol UDP atau WebSocket. Selain itu, Pulsetracker boleh menghantar kemas kini lokasi masa nyata terus ke bahagian belakang pembangun, menjadikannya pilihan yang hebat untuk aplikasi yang memerlukan penjejakan masa nyata.

Dalam tutorial ini, kami akan menggunakan Pulsetracker dengan skrip Python sebagai pendengar untuk kemas kini lokasi masa nyata. Skrip Python bertindak sebagai pendengar Pulsetracker yang menerima kemas kini dan menghantarnya kepada pengendali kerja Laravel melalui Redis, membolehkan Laravel memproses kemas kini ini dengan cekap.

Prasyarat

1.Akaun Pulsetracker: Sediakan akaun Pulsetracker dan dapatkan kunci apl dan token kebenaran anda.

2.Redis: Pastikan anda telah memasang dan menjalankan Redis.

3. Projek Laravel: Sediakan projek Laravel jika anda belum memilikinya.

Persediaan Projek

Persediaan ini melibatkan dua komponen utama:

1.Skrip Python: Mendengar kemas kini lokasi daripada Pulsetracker.

2.Laravel Job: Memproses data lokasi yang diterima daripada skrip Python.

Langkah 1: Menyediakan Skrip Python

Skrip Python bersambung ke perkhidmatan Pulsetracker Pusher, mendengar kemas kini lokasi dan menolaknya ke dalam baris gilir Redis untuk dikendalikan oleh Laravel.

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

Dalam skrip ini:

Fungsi channel_callback menolak kemas kini lokasi ke dalam baris gilir Redis.

Fungsi connect_handler melanggan saluran Pulsetracker tertentu dan mengikatnya pada acara DeviceLocationUpdated.

Skrip ini harus berjalan secara berterusan untuk mendengar kemas kini dan menyampaikannya kepada Redis untuk Laravel

Langkah 2: Mengkonfigurasi Laravel

Sekarang, mari buat kelas kerja Laravel yang akan memproses kemas kini yang diterima daripada skrip Python.

Laravel Job: PulseLocationUpdatedJob

Dalam Laravel, kelas kerja memproses data yang ditolak ke dalam baris gilir Redis oleh pendengar Python. Inilah kelas 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();
    }
}

Mulakan pekerja baris gilir Laravel untuk mula memproses kerja:

php artisan queue:work --queue=geopulse

Keputusan

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

Kesimpulan

Dalam persediaan ini, pendengar Python menstrim data lokasi masa nyata dengan cekap daripada Pulsetracker ke baris gilir Redis anda, yang diproses oleh Laravel sebagai kerja latar belakang. Pendekatan ini membolehkan anda mengendalikan jumlah data masa nyata yang tinggi, sambil membenarkan Laravel memfokuskan pada kegigihan data dan tugas bahagian belakang.

Sumber :
https://fly.io/laravel-bytes/queues-with-other-languages/

Atas ialah kandungan terperinci Membina Penyelesaian Penjejakan Lokasi Masa Nyata dengan Pulsetracker, Laravel dan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Platform Ujian Kod Rendah ModenArtikel seterusnya:Platform Ujian Kod Rendah Moden