Position actuelle: Accueil> Derniers articles> Explication détaillée du cas de mise en œuvre du PHP en temps réel Push (basé sur un sondage long)

Explication détaillée du cas de mise en œuvre du PHP en temps réel Push (basé sur un sondage long)

gitbox 2025-08-05

Contexte de cas

La technologie de messagerie en temps réel peut aider les sites Web et les applications à obtenir une expérience d'interaction utilisateur plus efficace. Par exemple, lorsque les utilisateurs utilisent le service client en ligne, la salle de discussion ou le système de notification en temps réel, ils doivent recevoir des messages du serveur dès que possible. Bien que WebSocket soit actuellement la technologie de communication en temps réel grand public, en raison d'un mauvais support pour certains serveurs ou environnements, l'utilisation de PHP combinée à un long sondage est toujours une alternative pratique et réalisable.

Le principe de la poussée de message en temps réel

La clé de la poussée de message est de maintenir une communication continue entre le client et le serveur. La communication HTTP traditionnelle est une réponse à sens unique, tandis que le sondage long retarde la réponse après que le client a publié une demande, réalisant ainsi un effet approximatif en temps réel.

Flux de travail de sondage long

Le processus de communication des sondages longs peut être divisé en étapes suivantes:

  • Le client envoie une demande au serveur.
  • Le serveur détermine si de nouveaux messages sont disponibles.
  • S'il y a un nouveau message, renvoyez les données du message immédiatement.
  • S'il n'y a pas de message, le serveur reste connecté et attend qu'un nouveau message soit généré.
  • Après avoir attendu un temps mort ou un message, le serveur renvoie une réponse.
  • Après avoir reçu la réponse, le client envoie à nouveau la demande immédiatement, formant une boucle de sondage.

Étapes de mise en œuvre du système

Créer une table de base de données

Nous devons d'abord concevoir une table de base de données pour stocker les messages. Par exemple, vous pouvez créer le tableau "Messages" suivant:

 
CREATE TABLE messages (
  id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  content VARCHAR(255) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Développement de pages avant

La page frontale est utilisée pour afficher les messages en temps réel poussés et peut être traité à l'aide de HTML et JavaScript en conjonction avec jQuery:

 
<!DOCTYPE html>
<html>
<head>
  <title>Push de message en temps réel</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="app.js"></script>
</head>
<body>
  <div id="messages"></div>
</body>
</html>

Logique de traitement du backend

Le code PHP backend est responsable de la gestion de la logique de sondage longue et de la réponse aux données. Nous pouvons créer un fichier nommé index.php pour gérer les demandes initiées par le frontal.

Exemples de traitement de PHP de base

 
<?php
// Connexion de base de données
$conn = new mysqli("localhost", "nom d&#39;utilisateur", "mot de passe", "Nom de base de données");
if ($conn->connect_error) {
    die("Échec de la connexion: " . $conn->connect_error);
}

// Obtenez le dernier message reçu la dernière foisID
$lastId = isset($_GET['last_id']) ? intval($_GET['last_id']) : 0;
$timeout = 30; // Attendez au plus30Deuxième
$startTime = time();

while (true) {
    $sql = "SELECT * FROM messages WHERE id > $lastId ORDER BY id ASC";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        $messages = [];
        while($row = $result->fetch_assoc()) {
            $messages[] = $row;
        }
        echo json_encode(["status" => "success", "data" => $messages]);
        break;
    } else {
        // Tous les autres1Deuxième检查一次是否有新消息,Évitez la pression excessive du serveur
        sleep(1);
    }

    if ((time() - $startTime) > $timeout) {
        echo json_encode(["status" => "timeout", "data" => []]);
        break;
    }
}
$conn->close();
?>

Script de sondage frontal (app.js)

 
let lastId = 0;
function fetchMessages() {
  $.ajax({
    url: 'index.php',
    type: 'GET',
    data: { last_id: lastId },
    success: function(response) {
      if (response.status === 'success') {
        response.data.forEach(function(msg) {
          $('#messages').append('<p>' + msg.content + '</p>');
          lastId = msg.id;
        });
      }
      fetchMessages();
    },
    error: function() {
      setTimeout(fetchMessages, 3000);
    }
  });
}

$(document).ready(function() {
  fetchMessages();
});

Résumer

Grâce aux méthodes ci-dessus, nous avons réussi à construire un système de poussée de messagerie en temps réel de base en utilisant PHP et une technologie de sondage longue. Cette solution a une bonne compatibilité et un faible seuil de développement, et convient aux projets qui ne prennent pas en charge les environnements WebSocket. Il s'agit d'une solution à adopter pour les scénarios d'application qui nécessitent de faibles performances en temps réel mais nécessitent des commentaires en temps opportun.