PHP Sleep Auslastung und timeout

tscherub

Well-known member
ID: 336895
L
15 Februar 2009
130
9
Hi,
mal ein paar fragen zu dem php befehl sleep.
Mit :
Code:
ob_implicit_flush();
echo 'blub';
	sleep(10);
echo 'blub2';
	sleep(10);
echo 'blub3
	sleep(10);
echo 'blub4';';

kann man ja alle 10 sec etwas ausgeben. nun wollte ich wissen, wie zum einen die Auslastung durch schlafende seiten ist (server/client cpu und verbindung) also z.B ob 1000 schlafende anfragen den Server auslasten oder ob der das gar nicht merkt.

Dann wollte ich noch fragen, wie das mit dem timeout (maximale Laufzeit für php Scripte) ist. Zählt das sleep dazu oder wird das rausgenommen. Bekäme man also bei obigen Beispiel und gesetztem Limit auf 25sec. immer ein timeout?

Und was noch ganz interessant wäre:
wenn man dann javascript mit onload: läd, wird der dann erst geladen wenn alles fertig ist oder direkt. Also blub3 wäre jetzt mit onload:machewas() versehen. Kommt machewas() dann nach 20sec. oder nach 30 ?

Wäre nett, wenn mir das jemand beantworten könnte... Nach dem mit der Auslastung hab ich schon ne Stunde in goggle gesucht;-<

mfg tscherub
 
kann man ja alle 10 sec etwas ausgeben. nun wollte ich wissen, wie zum einen die Auslastung durch schlafende seiten ist (server/client cpu und verbindung) also z.B ob 1000 schlafende anfragen den Server auslasten oder ob der das gar nicht merkt.
schlafende PHP-Prozesse kosten keine Leistung, Apache ist da aber der absolute Performance-Killer. Jede laufende Anfrage verbraucht 1 Thread, bei mehr als ein paar Dutzend gleichzeitigen Anfragen geht der Apache in die Knie ;)
Fürs Web also eine sehr schlechte Idee.

Dann wollte ich noch fragen, wie das mit dem timeout (maximale Laufzeit für php Scripte) ist. Zählt das sleep dazu oder wird das rausgenommen. Bekäme man also bei obigen Beispiel und gesetztem Limit auf 25sec. immer ein timeout?
10 Sekunden sleep zählen nicht zum Timeout, es zählt nur die echte Rechenzeit.


Und was noch ganz interessant wäre:
wenn man dann javascript mit onload: läd, wird der dann erst geladen wenn alles fertig ist oder direkt. Also blub3 wäre jetzt mit onload:machewas() versehen. Kommt machewas() dann nach 20sec. oder nach 30 ?
onLoad wird immer erst gefeuert, wenn alles geladen wurde, also eher ungeeignet ;)



Was willst du denn überhaupt machen? Ich könnte wetten es gibt eine deutlich bessere Methode als Sleeps (, die eventuell bei Standard-Webhosting nicht möglich ist).
 
Vielen dank für die ausführliche antwort.

Naja... gut etwas mehr als ein dutzend hätte ich schon gebraucht... dann bringts nix.

Ich wollte umgehen, das man bei forcedvergütungen (so wies mir aktuell bekannt ist) im frameset einen cookie(session) sets um dann im vergütungsframe zu überprüfen ob auch wirklich die werbung angezeigt wurde (nicht nur der vergütungsframe aufgerufen wurde).

wenn man alles so ausgibt dann einen sleep bis aufenthaltszeit rum und dann vergütet hätte man das problem erledigt. Dann halt doch über einzigartige codes;->

mfg tscherub
 
und woher hätte dein Script nach Ablauf des sleeps wissen sollen, dass der Frame wirklich noch angezeigt wird?
Das PHP-Script wurde einmal angestoßen und läuft dann, es hat keine Ahnung, ob die Seite wirklich noch angezeigt wird.
ignore_user_abort(false) muss nicht funktionieren, es kann viele Gründe geben, warum das PHP-Script trotzdem weiterlaufen sollte.
 
und woher hätte dein Script nach Ablauf des sleeps wissen sollen, dass der Frame wirklich noch angezeigt wird?
Das PHP-Script wurde einmal angestoßen und läuft dann, es hat keine Ahnung, ob die Seite wirklich noch angezeigt wird.
ignore_user_abort(false) muss nicht funktionieren, es kann viele Gründe geben, warum das PHP-Script trotzdem weiterlaufen sollte.

Oh... ok... ich dachte ein php-Script bricht ab wenn die verbindung unterbrochen wird. Wenn das weiterläuft ist es sowieso sinnlos... naja, überleg ich mir halt noch was;->

mfg tscherub
 
Also hab grade erst erfahren, das es solche funktionen überhaupt gibt...
Passiert halt wenn man eine Programmiersprache in 3 Stunden lernt ;->

Aber ich hab mit grad das manual dazu durchgelesen....
Wenn ichs richtig verstanden habe sollte das klappen, sofern die Ausgabe auch wirklich gesendet wird (also nicht nur echo, sonder auch flush()).

Aber warte lieber nochmal auf ne Antwort von jemandem der mehr Ahnung hat, als wie ich (z.B ice-breaker ).

mfg tscherub
 
Weisst Du zufälligerweise, ob connection_aborted() mit direkter vorheriger Ausgabe genauso unsicher ist?

habe ich ehrlich gesagt keine Ahnung, aber ich würde mal vermuten, dass die beiden Funktionen von der funktionsweise sehr ähnlich sein werden.

Eigentlich hätte ich das auch nicht erwartet, ich durfte aber ein Problem debuggen bei dem sich dann eben herausstellte, dass bei dem Apache ignore_user_abort(false) nicht immer funktionierte, warum habe ich nicht herausgefunden, das Problem wurde einfach unstrukturiert und fertig.
 
Naja ich kann mir vorstellen das Apache den user abort zwar ignoriert aber connection_aborted is ja ein expliziter poll nach dieser information is seh also nicht was fuer einen Sinn das sonst machen wuerde.

Mal eben nachguck...

Mal wieder vollkommen falsch gedacht, stellt sich raus ich hab's mit PHP 5 und Apache 2.2 in keiner kombination dazu gebracht dass er den connection_status korrekt anzeigt. Egal ob mit ignore_user_abort() oder connection_status() oder connection_aborted(). Ziemlich sinnlos also...
 
Zuletzt bearbeitet:
ich würde per JS nach dem anzeigen eine webseite aufrufenm die dann sagt, ok angeschaut.
Dazu muss in der DB aber ein Zeitstempel stehen, welcher vorzeitiges senden des JS verhindert -> als fake erkennt und sperrt.
MEhr kann man nicht machen.
Wer kein JS aktiviert hat, kann halt keine vergütung bekommen :-?
 
ich würde per JS nach dem anzeigen eine webseite aufrufenm die dann sagt, ok angeschaut.
Dazu muss in der DB aber ein Zeitstempel stehen, welcher vorzeitiges senden des JS verhindert -> als fake erkennt und sperrt.
MEhr kann man nicht machen.
Wer kein JS aktiviert hat, kann halt keine vergütung bekommen :-?
Ja... aber genau das (datenbankzugriff oder cookie setzen) wollte ich ja verhindern...
Wird aber genau darauf hinauslaufen.

aber danke für den Vorschlag.

mfg tscherub