Sie für Warteschlangen verschiedene Möglichkeiten finden, unter denen die beiden folgenden: pheanstalk
1) unter Verwendung einer Warteschlange Bibliothek wie (erfordert beanstalkd). Es ist eine Warteschlange, die das TCP-Protokoll verwendet (standardmäßig auf Port 11300, obwohl dies leicht geändert werden kann). Es ist sehr gut getestet, robust und vor allem Open-Source: https://github.com/pda/pheanstalk
2) Speichern Sie Ihre Benutzer Eingabe in einer Datenbank und hat Ihren Code die Anforderung alle 10 Sekunden ausgeführt werden. Diese Option ist wahrscheinlich viel einfacher auszuführen. Sie müssten jedoch auch einen Dämon erstellen, bei dem es sich im Grunde um ein eigenständiges Skript handelt, das im Hintergrund ausgeführt wird und die Informationen in der Warteschlange verarbeitet. Zum Beispiel kann sagen, dass die Formularseite die Benutzer Umleitungen an validation.php, wenn das Formular abgeschickt wird und der folgende PHP-PDO-Code wird ausgeführt:
//....
$sql = "INSERT INTO queue (user_id, process) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
$stmt->execute([$id, $process]);
//...
Sie dann $id
und $process
am Ende der gespeicherten habe queue
Tabelle (ALSO lässt annehmen, dass die Warteschlange einen PRIMARY KEY namens queue_id
hat, der als AUTO_INCREMENT eingerichtet ist). Von dort aus würde das Sand-Alone-Skript (Daemon) im Hintergrund ausgeführt werden, das diese Daten abrufen und verarbeiten würde. Zum Beispiel:
worker.php:
<?php
//other code like connecting to the database
while (1)
{
$sql = "SELECT * FROM queue LIMIT 1; ";
$stmt = $conn->query($sql);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
//code that processes the values obtained from result
$sql = "DELETE FROM queue WHERE queue_id = {$result['queue_id']}";
$stmt = $conn->query($sql);
}
Empfehlung:
Es wäre noch besser, wenn Sie Transaktionen in dem obigen Code verwendet, um sicherzustellen, dass die Auswahl, Verarbeitung, und Löschen alle zusammen passieren. Wenn zum Beispiel der Strom beim nächsten Löschvorgang auf Ihrem Server (oder ähnlichem) ausgeht, würde Ihre Datei "workers.php" beim Neustart des Servers diese Datei erneut verarbeiten, da sie nicht gelöscht wurde, jedoch bei Transaktionen wäre kein Problem.
Verwenden Sie eine Datenbank zum Speichern von Benutzern, die sich gerade in der Warteschlange befinden. – lolbas
Das ist eine nicht triviale Aufgabe ... Ohne weitere Details würde ich sagen, der saubere und robuste Ansatz besteht darin, jede Anfrage sofort zu akzeptieren und nur die Aufgabe in ein serverseitiges Warteschlangensystem einzuordnen. Dann können Sie clientseitig ausgelöste Ajax-Long-Poll-Anforderungen (oder Web-Sockets) verwenden, um auf das Ergebnis des Ergebnisses in der Warteschlange zu warten. – arkascha
lassen Sie mich wissen, wenn meine Antwort geholfen hat – Webeng