DevGang
Авторизоваться

Реализация отслеживания местоположения в реальном времени с Laravel и Pulsetracker

Отслеживание местоположения в реальном времени критически важно для многих приложений, включая логистику и управление автопарком. Pulsetracker — это BaaS-решение, упрощающее эту задачу, позволяя разработчикам сосредоточиться на создании приложений, а не на управлении инфраструктурой. Pulsetracker использует WebSockets и UDP для клиентов, а также Redis Pub/Sub для подписчиков, обеспечивая гибкость и масштабируемость.

Это руководство демонстрирует интеграцию Pulsetracker с Laravel для получения обновлений местоположения в реальном времени.

Pulsetracker: преимущества использования

Pulsetracker предлагает:

  1. Масштабируемую инфраструктуру: Избавьтесь от сложностей управления собственными серверами для обработки данных в реальном времени.
  2. Простоту интеграции: Легко интегрируется с различными языками программирования.
  3. Настраиваемые параметры конфиденциальности: Управляйте хранением данных для баланса между функциональностью и конфиденциальностью.
  4. Эффективную потоковую передачу данных: Redis Pub/Sub обеспечивает передачу данных в реальном времени без избыточных накладных расходов.

Выбор Laravel

Laravel — это удобный и элегантный PHP-фреймворк, идеально подходящий для приложений с обновлениями в реальном времени. Встроенная поддержка Redis и планировщика задач, а также богатая экосистема, делают Laravel отличным выбором для интеграции с Pulsetracker. Эта комбинация обеспечивает бесшовную интеграцию, позволяя сфокусироваться на уникальных функциях вашего приложения.

Интеграция Pulsetracker Redis Pub/Sub с Laravel

Подключите Redis Pub/Sub от Pulsetracker к вашему приложению Laravel, выполнив следующие шаги:

Настройка Redis

Модифицируйте файл config/database.php, добавив новое соединение Redis для Pulsetracker.

'pulsetracker' => [
    'url' => env('PULSETRACKER_REDIS_URL'),
],

Укажите URL сервера Redis Pulsetracker в файле .env.

PULSETRACKER_REDIS_URL=redis://redis-sub.pulsestracker.com:6378

Создание консольной команды

Создайте консольную команду Laravel для подписки на канал Pulsetracker:

php artisan make:command PulsetrackerSubscribe

Замените содержимое файла app/Console/Commands/PulsetrackerSubscribe.php предоставленным кодом. Эта команда подписывается на ваш канал и обрабатывает обновления местоположений в реальном времени.

<?php

namespace App\Console\Commands;

use Exception;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Str;

class PulsetrackerSubscribe extends Command
{
    protected $signature = 'pulsetracker:subscribe';
    protected $description = 'Subscribe to Pulsetracker Redis server for real-time updates';

    public function handle(): void
    {
        $appKey = 'your-app-key'; // Replace with your Pulsetracker app key
        $token = 'your-bearer-token'; // Replace with your Pulsetracker token
        $signature = $this->generateSignature($appKey, $token);

        Redis::connection('pulsetracker')->subscribe(["app:$appKey.$signature"], function (string $message) {
            echo "Received: $message\n";
        });
    }

    private function generateSignature(string $appKey, string $token): string
    {
        if (!str_contains($token, '|')) {
            throw new Exception('Invalid token format');
        }

        return hash_hmac('sha256', $appKey, hash('sha256', Str::after($token, '|')));
    }
}

Запуск подписчика

Запустите подписчик как фоновый процесс:

php artisan pulsetracker:subscribe

Подписчик начнет получать обновления местоположений в реальном времени.

Обработка обновлений

Обрабатывайте полученные сообщения (обновления местоположений), например:

  • Обновляя базу данных.
  • Отправляя уведомления.
  • Интегрируясь с картографическими сервисами.

Пример местоположения вещателя в JavaScript с использованием веб-сокетов

var wsServer = 'wss://ws-tracking.pulsestracker.com';
var websocket = new WebSocket(wsServer);
const appId = 'YOUR_APP_KEY';
const clientId = 'YOUR_CLIENT_KEY';

websocket.onopen = function(evt) {
    console.log("Connected to WebSocket server.");
    setInterval(() => {
        if (websocket.readyState === WebSocket.OPEN) {
            navigator.geolocation.getCurrentPosition((position) => {
                const locationData = {
                    appId: appId,
                    clientId: clientId,
                    data: {
                        type: "Point",
                        coordinates: [position.coords.longitude, position.coords.latitude]
                    },
                    extra: {
                        key: "value"
                    }
                };


                // Send location data as JSON
                websocket.send(JSON.stringify(locationData));
                console.log('Location sent:', locationData);
            }, (error) => {
                console.error('Error getting location:', error);
            });
        }
    }, 3000);
};

websocket.onclose = function(evt) {
    console.log("Disconnected");
};

websocket.onmessage = function(evt) {
    if (event.data === 'Pong') {
        console.log('Received Pong from server');
    } else {
        // Handle other messages
        console.log('Received:', event.data);
    }
};

websocket.onerror = function(evt, e) {
    console.log('Error occurred: ' + evt.data);
};

Заключение

Pulsetracker значительно упрощает создание систем отслеживания местоположения в реальном времени. Сочетание надежности Laravel и масштабируемости Pulsetracker позволяет быстро разрабатывать мощные приложения, ориентированные на геолокацию.

Начните использовать Pulsetracker уже сегодня и получите преимущества отслеживания в реальном времени! Более подробная информация доступна в документации Pulsetracker.

Источник:

#PHP #Laravel #Redis #JavaScript
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу