Wenn die PHP-Engine bereits ein Skript auf dem Server ausführt, was würde dann mit anderen gleichzeitigen Browseranforderungen an dasselbe Skript geschehen?
- Werden die Anfragen in die Warteschlange gestellt?
- Werden sie ignoriert?
- Wird jede Anfrage eine eigene Skriptinstanz haben?
- Irgendeine andere Möglichkeit?
Antworten:
Abhängig von seiner Konfiguration kann der Server im Allgemeinen Hunderte von Anforderungen gleichzeitig bearbeiten. Wenn Sie Apache verwenden,
MaxClients
lautet die Konfigurationsoption wie folgt:Die Tatsache, dass zwei Clients dieselbe Seite anfordern, ist kein Problem.
So :
Nein ; außer wenn :
MaxClients
derzeit aktive Prozesse - siehe das Zitat aus dem Apache-Handbuch kurz zuvor.Nein, dies würde bedeuten, dass nur ein Benutzer gleichzeitig eine Website verwenden kann. das wäre doch nicht ganz schön, oder?
Wenn dies der Fall wäre, könnte ich diese Antwort nicht posten, wenn Sie im selben Moment F5 drücken würden, um zu sehen, ob jemand geantwortet hat!
(Nun, SO ist nicht in PHP, aber die Prinzipien sind die gleichen)
Ja ^^
Bearbeiten, nachdem Sie das OP und den Kommentar bearbeitet haben:
Es gibt keine " Skriptinstanz ": Einfach ausgedrückt, was passiert, wenn eine Anforderung an ein Skript gestellt wird, ist:
In Wirklichkeit können zwei Benutzer eine Anfrage an dasselbe PHP-Skript senden (oder an verschiedene PHP-Skripte, die alle dieselbe PHP-Datei enthalten) . Das ist definitiv kein Problem, oder keine der Websites, an denen ich jemals gearbeitet habe, würde funktionieren!
quelle
Wenn 2 Clients gleichzeitig den Server anrufen, kann der Server höchstwahrscheinlich beide Clients fast gleichzeitig beantworten. Die Clients hier definiere ich auf Browserebene.
Das heißt, wenn Sie auf demselben Computer zwei Browser verwenden, um dieselbe Website / Seite gleichzeitig zu laden, sollten beide gleichzeitig geladen werden.
Da es sich jedoch um PHP handelt, müssen Sie spezielle Notizen zu Sitzungen machen. Wenn Ihre Seiten Sitzungen verwenden, stellt der Server jeweils nur eine Seite bereit. Dies liegt daran, dass die Sitzungsdatei gesperrt wird, bis ein Skript beendet wird.
Schauen Sie sich dieses Beispiel an. Die 2 Dateien werden aus derselben Sitzung geladen, auch bekannt als derselbe Browser und derselbe Benutzer.
Beachten Sie, dass scriptb.php erst gestartet wird, nachdem scripta.php bereitgestellt wurde. Dies liegt daran, dass beim Start von scripta.php die Sitzungsdatei an andere Skripte gebunden ist, damit scripta.php in die Sitzungsdatei schreiben kann. Wenn scripta.php abgeschlossen ist, wird die Sitzungsdatei entsperrt und kann daher von anderen Skripten verwendet werden. Daher wartet scriptb.php, bis die Sitzungsdatei freigegeben ist, sperrt dann die Sitzungsdatei und verwendet sie.
Dieser Vorgang wird immer wieder wiederholt, um zu verhindern, dass mehrere Skripte in dieselbe Sitzungsdatei schreiben und Verzögerungen verursachen. Daher wird empfohlen,
session_write_close
() aufzurufen, wenn Sie die Sitzung nicht mehr verwenden, insbesondere auf einer Website mit vielen Iframes oder AJAX.quelle
Bin gerade selbst darauf gestoßen. Grundsätzlich müssen Sie anrufen
session_write_close()
, um das Sperren einzelner Benutzer zu verhindern. Stellen Sie nach dem Aufruf sicher, dass Siesession_write_close()
keine Sitzungsvariablen ändern. Behandeln Sie Sitzungen von nun an als schreibgeschützt.quelle
Sofern Sie kein sehr standardmäßiges Setup ausführen, verfügt Ihr Webserver (Apache, IIS, Nginx usw.) über mehrere Prozesse, auf denen PHP für jede auf dem Server eingehende Anforderung separat ausgeführt wird. Gleichzeitige Anfragen werden gleichzeitig bearbeitet.
quelle