Pulsetracker 是一種用於即時位置追蹤的後端服務,專為需要強大而靈活的方式來監控位置資料而無需依賴專有 SDK 或基礎設施的開發人員而設計。它允許開發人員使用 UDP 或 WebSocket 協定實現自己的客戶端 SDK。此外,Pulsetracker 可以直接向開發者後端發送即時位置更新,使其成為需要即時追蹤的應用程式的強大選擇。
在本教程中,我們將逐步使用 Pulsetracker 和 Python 腳本作為即時位置更新的監聽器。 Python 腳本充當 Pulsetracker 監聽器,接收更新並透過 Redis 將它們分派給 Laravel 作業處理程序,使 Laravel 能夠有效率地處理這些更新。
1.Pulsetracker 帳戶:設定 Pulsetracker 帳戶並取得您的應用程式金鑰和授權令牌。
2.Redis:確保您已安裝並執行 Redis。
3.Laravel 項目:如果您還沒有 Laravel 項目,請建立一個。
此設定涉及兩個主要組件:
1.Python 腳本:監聽來自 Pulsetracker 的位置更新。
2.Laravel Job:處理從Python腳本接收到的位置資料。
Python 腳本連接到 Pulsetracker 的 Pusher 服務,監聽位置更新,並將它們推送到 Redis 隊列中供 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)
在此腳本中:
channel_callback 函數將位置更新推送到 Redis 佇列。
connect_handler 函數訂閱特定的 Pulsetracker 通道並將其綁定到 DeviceLocationUpdated 事件。
此腳本應該持續運行以偵聽更新並將其傳遞給 Laravel 的 Redis
現在,讓我們建立一個 Laravel 作業類別來處理從 Python 腳本收到的更新。
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-languages/
以上是使用 Pulsetracker、Laravel 和 Python 建立即時位置追蹤解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!