Ich versuche, eine Verbindung zu einem BeanStalkd-Server über ein PHP-Skript herzustellen und Aufträge aus einer vorhandenen Warteschlange zu reservieren. ich die fgets bin mit() Funktion Antworten vom Deamon zu bekommen, um das Skript erwartet zu hängen, wenn nicht ein Job zur Verfügung steht, ist hier ein Beispielcode:PHP fgets() (oder fread()) blockiert nicht
set_time_limit(0);
$connection = fsockopen('localhost', 11300);
fwrite($connection, "reserve\r\n");
stream_set_blocking($connection, TRUE);
fgets($connection);
Wie Sie sehen, ich versuche zu zwingen Die fgets() -Funktion blockiert und ich setze die max_execution_time auf 0 (keine Begrenzung), aber nach einer Weile (2 Minuten) kehrt das Skript ohne Fehler zurück. Ich habe versucht, den Reserve-Befehl über Telnet auszuführen und es hängt wie erwartet. Ich habe auch versucht, fread() zu verwenden, aber ich bekomme das gleiche Verhalten.
Irgendwelche Vorschläge, wie man es löst?
Ja, es wäre eine Lösung, aber ich würde gerne wissen, ob es eine komplett blockierungsfreie Möglichkeit gibt, dies zu tun, ohne eine korrekte Wartezeit zu erraten, ohne dass das Skript stirbt. Ich frage mich, ob das eine Art Bug ist. –