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.
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.
Der Kommunikationsprozess für lange Umfragen kann in die folgenden Schritte unterteilt werden:
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
);
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>
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.
 
<?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();
?>
 
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();
});
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.