2013-02-20 6 views
6

Hallo meine Frage ist, wie der Datenfluss genau in Apache-Webserver + PHP funktioniert.Apache php> Benutzeranfragen

Wenn Benutzer Zugriff auf URL: localhost/index.php und in der gleichen Zeit, wenn ein anderer Benutzer auf die gleiche URL zugreifen, ich denke Anfragen werden nacheinander ausgeführt (nicht Multi-Threaded) und der erste Benutzer erhalten Antwort dann andere.

die Frage ist: wenn irgendwie die erste Anfrage in der Schleife für lange Zeit wie 1min bleibt, sollten die anderen Benutzer die erste Anfrage warten, um dann ihre Anträge zu beenden, um Antwort vom Apache Webserver + PHP zu erhalten? Wenn die Antwort ja ist (andere Benutzer sollten in der Warteschlange warten): können wir Anfragen parallel ausführen lassen (Multi-Thread), um das Warten in der Warteschlange zu verhindern

+0

Apache verfügt über mehrere Multithreading-Modelle zur Auswahl, und PHP verfügt über mehrere SAPIs. In der Praxis ist es aus der Sicht der Codierung irrelevant. –

Antwort

9

Während PHP Single-Threaded sein kann, kann Apache multi laufen -process und multi-threaded. Dadurch können viele Anfragen gleichzeitig ausgeführt werden. Sie können konfigurieren, wie viele gleichzeitige Anfragen tatsächlich sind.

Sie können sehen, Apache diese Anfragen live, sehen, welche warten, und welche über mod_status (http://httpd.apache.org/docs/2.2/mod/mod_status.html) bedient werden.

+1

Wie wäre es, wenn das gleiche Skript ausgeführt wird und die erste Anforderung länger als 1 Minute einfriert? –

+0

Meinst du mit zwei verschiedenen Benutzern? In diesem Fall ja. Apache wird viele, viele Benutzer gleichzeitig bedienen. Sie können es als viele, viele Apache-Server betrachten, die alle unabhängig arbeiten und sich nicht darum kümmern, was die anderen tun, obwohl es nur eine Installation von Apache ist. –

+2

Ich habe ein Skript, das 8 Stunden läuft, nachdem ich es aus dem Browser aufgerufen habe, aber wenn ich versuche, ein anderes Skript aus einem anderen Browser Tab zu öffnen, werde ich nur geladen wie warten auf Antwort (Chrome Problem sollte) aber wenn ich von einem anderen Browser öffne (ie9) Ich kann die Antwort so schnell wie möglich bekommen, dies beweist, dass Apache Multi-Threading ist. –

2

Apache hat mehrere Threads, so dass mehrere PHP-Skripte gleichzeitig ausgeführt werden können.

Webserver wie Nginx verwenden eine ereignisgesteuerte Architektur. Asynchronous I/O und all dieser Jazz.

Webserver haben normalerweise eine Art von Mechanismus, mit dem sie mehr als eine Anfrage gleichzeitig bearbeiten können oder zumindest so aussehen, als ob sie es könnten.

Apache verwendet Threads, Nginx verwendet eine Event-Schleife, aber sie sind nicht seriell in dem Sinne, den Sie wollen. Der Grund ist sehr einfach: Es verschwendet Ressourcen. Während Ihr PHP-Skript darauf wartet, dass sich die Festplatte an die richtige Position bewegt, damit Sie einen Block aus einer Datei lesen können, die Sie gerade lesen, könnten Sie auch etwas anderes tun, z. eine weitere Anfrage bearbeiten, die gerade keine E/A benötigt.

Wenn es wichtig ist, dass eine Anforderung beendet wird, bevor andere Benutzer Anforderungen stellen, sollten Sie in eine entkoppelte asynchrone Architektur wechseln. Ich weiß nicht, wie Sie in Ihre aktuelle Lösung investiert haben. Event-Handling kann so einfach wie eine einfache Umfrage oder sogar eine long poll implementiert werden.

+1

wie ich aus Ihrer Antwort verstehen kann Apache ist Multi-Threaded und führt parallel Anfragen in der gleichen Zeit in der Theorie. Aber wie wäre es, wenn das gleiche Skript aufgerufen wird, um ausgeführt zu werden und die erste Anfrage länger als 1min einfriert? Die zweite Anfrage wird gleichzeitig ausgeführt oder wartet auf die erste Anfrage? –

Verwandte Themen