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.
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 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.
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
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
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!