Mailinglisten-Archive |
Michael Hansen wrote: > Hallo Liste, > > Die Funktion ist effektiv, aber nicht effizient. Ich will damit sagen dass > ich bei einer Anfrage 60 Sekunden auf warten muss, bis mir das Ergebnis > angezeigt wird. Nach kurzer Analyse habe ich dann auch den zeitkritischen > Teil ausfindig machen könnt. Wie ihr an der Funktion sehen könnt, sind sogar > noch die letzten Variablen für die Zeitmessungen drin (absichtlich). > Die gesamte Funktion wird schnell durchlaufen, bis hin zu den fread. Hier > gehen gute 59 Sekunden der gesamten 60 Sekunden drauf. Nach weiterer Analyse > (so wie ihr es jetzt auch seht) habe ich dann festgestellt, dass diese 59 > Sekunden durch den letzten Schleifendurchlauf zustande kommen. Ich habe > keine Ahnung warum, aber im letzten Durchlauf scheint fread zu hängen. ohne jetzt deinen Quelltext gelesen zu haben kombiniere ich folgendes Problem: - fread() liest solange, bis genug daten vorhanden sind. - sind nicht genug Daten vorhanden, blockt fread(), bis Daten vorhanden sind, was nie der Fall ist - Nach 60 Sekunden wird phps socket timeout aktiv und killt die Verbindung. Dein Script läuft weiter. Es sollte dir helfen die socket_*-Funktionen zu verwenden statt fsockets. Ausserdem könnte dir stream_set_blocking helfen. > // Michael Hansen Yannik
php::bar PHP Wiki - Listenarchive