Frage zu - Stacks und Queues

Alice

Erfahrenes Mitglied
Hallo Leute. :)

Durch Zufall bin ich auf den Blog von Timestamp aufmerksam geworden. Dort hat er zwei Klassen zur Verfügung gestellt womit man, soviel ich verstanden habe, Warteschlangen realisieren kann.

Hier der Blog: http://www.tutorials.de/blogs/timestamp/11309-php-stacks-und-queues.html

Leider kann ich dort kein Kommentar schreiben (warum eigentlich nicht?) und über PN wäre es Käse.

Also Frage ich hier. :)

Wie kann ich das für mich nutzen?

Ich habe da ein Rechenintensives* Skript, welches ich gerne "limitieren" würde und die User quasi in eine Warteschlange platzieren würde um den Server nicht zu überlasten.

Nur wie kann ich die Kasse von Timestamp für mich nutzen? Ich verwende PHP 5.2.12-nmm4.

* Läuft alleine (also nur ein User verwendet es) ca. 5-6 Sekunden. Je weiteren User erhöht sich die Laufzeit um ca. 3 Sekunden. Mehr als 5-6 User gleichzeitig habe (konnte) ich nicht testen.
 
Dazu eignet sich das nur begrenzt.
Was sich dazu eignet entspricht dem Prinzip einer Queue, allerdings, da viele verschiedene User dort eingetragen werden, geht das am ehesten über eine Tabelle.
 
Hi

Idee zur Vorgehensweise:

a) Wenn ein Benutzer diese Aktion starten will, wird ein Eintrag in eine SQL-Tabelle gemacht
(welcher Benutzer, was genau...je nachdem was da gemacht wird (Noch immer SVG?))
Weiters auch Spalten bereithalten, ob der Auftrag fertig ist und wann das gemacht wurde.
Weiters zu einer Bitte-warten-Seite umleiten (Mit Get-Parameter: Id vom Auftrag)

b) Die Warteseite prüft, ob "ihr" Auftrag schon fertig ist (Tabellenspalte von oben)
Wenn ja: Ergbebnis ausgeben, das auch irgendwo in der DB oder sonstwo zu finden ist
und Auftrag löschen. Sonst eben "Bitte Warten".
Wenn man will kann man die Seite so machen, dass sie sich alle paar Sekunden neu aktualisiert,
oder per Ajax prüfen. Sonst muss der Benutzer eben immer wieder Aktualisieren drücken.

c) Wirklich gemacht wird die Arbeit von einem PHP-Programm,
das nicht per Browser angestartet wird, sondern am Server dauerhaft läuft
(ohne irgendwelche Interaktion mit den Usern).
(Wie man sowas macht: http://kvz.io/blog/2009/01/09/create-daemons-in-php/)

Das schaut immer wieder in die Auftragsliste
(dazwischen paar (hundert) Millisekunden sleepen schadet nicht),
und macht bei unerledigten Einträgen eben die Arbeit.
Dann das Ergebnis zum Abholen hinterlegen und auf "Fertig" stellen.

d) Was das Script aus c noch tun sollte:
Fertige Auftragseinträge, die sehr alt sind (Stunden, Tage...) aus der Tabelle löschen.
Bei denen ist das Ergebnis nie abgeholt worden, sind nur noch DB-Müll.


Zu Timestamps Klassen:
Das ist kein sinnvolles Anwendungsgebiet für sowas.
Du könntest höchstens die DB durch Normaldatei+Klassen ersetzen... :rolleyes:
 
Achso ok.

Ja es geht noch um das Thema SVG. :p

Es funktioniert auch alles perfekt und besser als ich es eigentlich je wollte.

Die Frage ist nur was passiert wenn 10, 20, 30, 40 und mehr User das Skript mehr oder weniger gleichzeitig aufrufen. Dann wird mir der Hoster sicher den Webspace lahmlegen und mir einen eigenen Server anbieten, den ich mir nicht leisten WILL für so ein schlichtes Projekt ohne jegliche Einnahmen.

Ich könnte das Projekt auch auf einem Home-Server auslagern für die Rechenkraft, aber dann muss ich a) meinen Home-Server ständig laufen lassen und b) mich um die Server-Sicherheit kümmern (was ja extrem schwer wäre) und vorallem c) reicht meine Leitung dafür wahrscheinlich nicht aus. -> 128MBit Download und nur 6 MBit Upload. Obwohl ich den aber auch auf 10 MBit hochrauben lassen kann. Aber das ist kein Vergleich zu 100MBit Upload in einem Rechenzentrum.

Na dann muss ich mir wohl die anderen Lösungen in Ruhe anschauen.
 
Zurück