Aktueller Standort: Startseite> Neueste Artikel> Detaillierte Erläuterung des PHP-Echtzeit-Message-Push-Implementierungsfalls (basierend auf langen Umfragen)

Detaillierte Erläuterung des PHP-Echtzeit-Message-Push-Implementierungsfalls (basierend auf langen Umfragen)

gitbox 2025-08-05

Fall Hintergrund

Echtzeit-Messaging-Technologie kann Websites und Anwendungen dabei helfen, ein effizienteres Erlebnis der Benutzerinteraktion zu erzielen. Wenn Benutzer beispielsweise Online-Kundendienst, Chatroom oder Echtzeit-Benachrichtigungssystem verwenden, müssen sie so bald wie möglich Nachrichten vom Server empfangen. Obwohl WebSocket derzeit die Mainstream-Echtzeit-Kommunikationstechnologie ist, ist die Verwendung einiger Server oder Umgebungen, die PHP-mit langen Umfragen in Kombination mit langer Umfragen immer noch praktisch und praktikabel ist.

Das Prinzip der Echtzeit-Nachrichtenschub

Der Schlüssel zum Message -Push besteht darin, die kontinuierliche Kommunikation zwischen dem Client und dem Server aufrechtzuerhalten. Die herkömmliche HTTP-Kommunikation ist eine Einweg-Request-Antwort, während lange Wahl die Antwort nach dem Kunden eine Anfrage verzögert und damit einen ungefähren Echtzeiteffekt erzielt.

Langer Wahllokal

Der Kommunikationsprozess für lange Umfragen kann in die folgenden Schritte unterteilt werden:

  • Der Client sendet eine Anfrage an den Server.
  • Der Server bestimmt, ob neue Nachrichten verfügbar sind.
  • Wenn es eine neue Nachricht gibt, geben Sie die Nachrichtendaten sofort zurück.
  • Wenn es keine Nachricht gibt, bleibt der Server in Verbindung und wartet darauf, dass eine neue Nachricht generiert wird.
  • Nachdem der Server auf eine Auszeit oder eine Nachricht gewartet hat, gibt er eine Antwort zurück.
  • Nach Erhalt der Antwort sendet der Client die Anfrage sofort erneut und bildet eine Wahlschleife.

Systemimplementierungsschritte

Erstellen Sie eine Datenbanktabelle

Wir müssen zunächst eine Datenbanktabelle zum Speichern von Nachrichten entwerfen. Sie können beispielsweise die folgende "Nachrichten" -Tabelle erstellen:

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

Front-End-Seitenentwicklung

Die Front-End-Seite wird verwendet, um die Push-Echtzeitmeldungen anzuzeigen und kann mit HTML und JavaScript in Verbindung mit JQuery verarbeitet werden:

 
<!DOCTYPE html>
<html>
<head>
  <title>Echtzeit-Nachrichtenschub</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>

Backend -Verarbeitungslogik

Der Backend -PHP -Code ist für die Behandlung der langen Wahllogik und der Datenantwort verantwortlich. Wir können eine Datei namens Index.php erstellen, um die vom Front-End eingeleiteten Anforderungen zu verarbeiten.

Basis -PHP -Verarbeitungsbeispiele

 
<?php
// Datenbankverbindung
$conn = new mysqli("localhost", "Benutzername", "Passwort", "Datenbankname");
if ($conn->connect_error) {
    die("Verbindung ist fehlgeschlagen: " . $conn->connect_error);
}

// Holen Sie sich die letzte Nachricht, die das letzte Mal empfangen wirdID
$lastId = isset($_GET['last_id']) ? intval($_GET['last_id']) : 0;
$timeout = 30; // Warten Sie höchstens30Zweite
$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 {
        // Jeder andere1Zweite检查一次是否有新消息,Vermeiden Sie übermäßigen Serverdruck
        sleep(1);
    }

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

Front-End Polling Skript (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();
});

Zusammenfassen

Mit den oben genannten Methoden haben wir mithilfe von PHP- und Long Polling-Technologie erfolgreich ein Basis-Echtzeit-Messaging-System erstellt. Diese Lösung hat eine gute Kompatibilität und einen geringen Entwicklungsschwellenwert und eignet sich für Projekte, die keine WebSocket -Umgebungen unterstützen. Es handelt sich um eine Lösung, die es wert ist, für Anwendungsszenarien eingesetzt zu werden, die eine geringe Echtzeitleistung erfordern, aber zeitnahes Feedback erfordern.