Maison  >  Article  >  cadre php  >  Comment utiliser Workerman pour mettre en œuvre un système de recommandation basé sur la localisation en temps réel

Comment utiliser Workerman pour mettre en œuvre un système de recommandation basé sur la localisation en temps réel

王林
王林original
2023-11-07 09:44:251333parcourir

Comment utiliser Workerman pour mettre en œuvre un système de recommandation basé sur la localisation en temps réel

Avec le développement de l’Internet mobile et la demande croissante de recommandations personnalisées, les systèmes de recommandation basés sur la localisation en temps réel deviennent de plus en plus importants. En tant que framework haute performance pour PHP, Workerman peut facilement créer un système de recommandation en temps réel. Cet article présentera principalement comment utiliser Workerman pour implémenter un système de recommandation basé sur la localisation en temps réel et fournira des exemples de code spécifiques.

  1. Déterminer l'architecture du système

Lors de la mise en œuvre d'un système de recommandation basé sur la localisation en temps réel, nous devons prendre en compte les questions suivantes :

(1) Comment obtenir les informations de localisation de l'utilisateur ?

(2) Comment stocker les informations de localisation dans la base de données ?

(3) Comment calculer la distance entre deux utilisateurs ?

(4) Comment mettre à jour les résultats recommandés en temps réel ?

Pour résoudre les problèmes ci-dessus, nous pouvons adopter l'architecture système suivante :

(1) Utilisez l'API de géolocalisation de HTML5 pour obtenir les informations de localisation de l'utilisateur.

(2) Stockez les informations de localisation dans la base de données MySQL.

(3) Calculez la distance entre deux utilisateurs en utilisant la formule haversine.

(4) Calculez les résultats des recommandations en temps réel côté serveur et retournez-les au client.

  1. Implémentation côté client

Tout d'abord, nous devons utiliser l'API de géolocalisation en HTML5 pour obtenir les informations de localisation de l'utilisateur :

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition);
} else {
    alert("Geolocation API is not supported in your browser.");
}
 
function showPosition(position) {
    var lat = position.coords.latitude;
    var lng = position.coords.longitude;
 
    // 将经纬度发送到服务器端进行处理
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "http://localhost:2345/savePosition.php", true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.send("lat=" + lat + "&lng=" + lng);
}

Ici, nous envoyons la longitude et la latitude au fichier savePosition.php côté serveur via un Requête POST pour traitement.

Côté serveur, nous pouvons utiliser la classe MySQL de Workerman pour stocker les informations de localisation dans une base de données MySQL :

require_once __DIR__ . '/vendor/autoload.php';
use WorkermanMySQLConnection;
 
$db = new Connection('localhost', '3306', 'root', 'password', 'dbname');
 
$lat = $_POST['lat'];
$lng = $_POST['lng'];
 
$db->insert('user_position', array('lat' => $lat, 'lng' => $lng));

Ici, nous stockons les informations de localisation de l'utilisateur dans une table nommée user_position.

  1. Implémentation côté serveur

Pour calculer la distance entre deux utilisateurs, nous pouvons utiliser la formule haversine.

L'implémentation de la formule haversine est la suivante :

DELTA_LATITUDE = LATITUDE_B - LATITUDE_A
DELTA_LONGITUDE = LONGITUDE_B - LONGITUDE_A
a = sin(DELTA_LATITUDE/2)^2 + cos(LATITUDE_A) * cos(LATITUDE_B) * sin(DELTA_LONGITUDE/2)^2
c = 2 * atan2(sqrt(a), sqrt(1-a))
DISTANCE = EARTH_RADIUS * c

En PHP, le code pour implémenter la formule haversine est le suivant :

function haversineDistance($lat1, $lng1, $lat2, $lng2)
{
    $earth_radius = 6371;
 
    $delta_latitude = deg2rad($lat2 - $lat1);
    $delta_longitude = deg2rad($lng2 - $lng1);
 
    $a = sin($delta_latitude / 2) * sin($delta_latitude / 2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($delta_longitude / 2) * sin($delta_longitude / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    $distance = $earth_radius * $c;
 
    return $distance;
}

Grâce au code ci-dessus, nous pouvons calculer la distance entre deux utilisateurs, en fonction de la distance et les informations sur les intérêts et les loisirs de l'utilisateur. Nous pouvons calculer les résultats des recommandations en temps réel et les renvoyer au client. Le code est implémenté comme suit :

function getRecommendations($user_id, $lat, $lng)
{
    $earth_radius = 6371;
    $max_distance = 20;
 
    $query = "SELECT id, lat, lng, interests FROM user_position WHERE id != '$user_id'";
    $result = $db->query($query);
 
    $recommendations = array();
 
    while ($row = mysqli_fetch_assoc($result)) {
        $distance = haversineDistance($lat, $lng, $row['lat'], $row['lng']);
 
        if ($distance <= $max_distance) {
            $interests = explode(",", $row['interests']);
            $common_interests = array_intersect($user_interests, $interests);
 
            if (count($common_interests) > 0) {
                $recommendations[] = $row['id'];
            }
        }
    }
 
    return $recommendations;
}
  1. Résumé

Grâce à cet article, nous avons appris à utiliser Workerman pour implémenter un système de recommandation basé sur la localisation en temps réel et avons fourni des exemples de code spécifiques. Le système de recommandation en temps réel est une application très pratique et a de larges perspectives d'application dans le domaine de l'entreprise, des réseaux sociaux, etc. J'espère que cet article pourra vous aider à comprendre comment utiliser Workerman pour mettre en œuvre un système de recommandation en temps réel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn