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.