Frage

Wenn der PHP-Engine ist bereits in der Mitte ein Skript auf dem Server auszuführen, was zu anderen gleichzeitigen Browser-Anfragen an das gleiche Skript geschehen würde?

  • Werden die Anforderungen in der Warteschlange?
  • Werden sie ignoriert werden?
  • Wird jede Anfrage haben ihre eigenen Skript Beispiel?
  • Eine andere Möglichkeit?
War es hilfreich?

Lösung

Der Server, je nach Konfiguration, kann in der Regel dienen Hunderte von Anfragen zur gleichen Zeit - bei Verwendung von Apache, die MaxClients Konfigurationsoption ist das eine sagen:

  

Die MaxClients Richtlinie legt die   Begrenzung der Anzahl der gleichzeitigen   Anfragen, die serviert werden.
Alle   Verbindungsversuche über das   MaxClients Grenze wird normalerweise   zu einer Reihe der Warteschlange, basierend auf dem Spiel   ListenBacklog Richtlinie.
Sobald ein Kind   Prozess wird am Ende eines befreiten   andere Anfrage, wird die Verbindung   dann gewartet werden.


Die Tatsache, dass zwei Clients fordern die gleiche Seite ist das kein Problem.

So:

  

Werden die Anforderungen in der Warteschlange werden?

Nein; außer wenn:

  • gibt es einige Sperre irgendwo - was zum Beispiel passieren kann, wenn die beiden Anfragen vom selben Client kommen, und Sie sind mit dateibasierte Sitzungen in PHP : während ein Skript ausgeführt wird, wird die Sitzung „gesperrt“, was bedeutet, dass der Server / Client, bis die erste Anforderung warten müssen wird (und die Datei freigeschaltet ) zu verwenden, um die Lage sein, die Datei, um die Sitzung für den zweiten Benutzer zu öffnen.
  • kommen die Anfragen vom gleichen Client und den gleichen Browser; die meisten Browser die Anforderungen in diesem Fall Warteschlange, auch wenn es nichts serverseitige ist dieses Verhalten zu erzeugen.
  • gibt es mehr als MaxClients aktuell aktive Prozesse - kurz bevor das Zitat von Apache-Handbuch
  • .


  

Werden sie ignoriert werden?

Nein

: Dies würde bedeuten, kann nur ein Benutzer eine Website zur gleichen Zeit verwenden; dies wäre nicht sehr schön sein, wäre es?

Wenn es der Fall ist, konnte ich nicht diese Antwort senden, wenn Sie, wo F5 im selben Moment treffen, um zu sehen, ob jemand beantwortet!
(Na ja, so ist nicht in PHP, aber die Prinzipien sind die gleichen)


  

Eine andere Möglichkeit?

Ja ^^


bearbeiten, nachdem Sie das OP und den Kommentar bearbeitet:

  

Wird jede Anforderung hat einen eigenen Skript   Beispiel?

Es gibt nicht so etwas wie „ Skriptinstanz “: einfach gesagt, was passiert, wenn ein Antrag auf ein Skript gemacht wird, ist:

  • die Webserver Gabeln ein anderer Prozess die Anfrage bearbeiten (oft aus Performance-Gründen werden diese Gabeln im Voraus gemacht, aber dies ändert nichts)
  • der Prozess liest den PHP-Skript von der Festplatte
    • mehr Prozesse dies zur gleichen Zeit tun : Es gibt keine Sperren auf Datei lesen
    • wird die Datei in den Speicher geladen; in einem gesonderten Speicherblock für jeden Prozess
  • die PHP-Datei im Speicher " zusammengestellt ", um Opcodes - noch im Speicher
  • diese Opcodes ausgeführt werden - nach wie vor aus dem Speicherblock, der zu dem Prozess gehört Ihre Anfrage zu beantworten


Wirklich, können Sie haben zwei Benutzer eine Anfrage an die gleiche PHP-Skript Senden (oder auf verschiedene PHP-Skripte, die alle die gleiche PHP-Datei enthalten) ; das ist auf jeden Fall kein Problem, oder keiner der Website, die ich jemals gearbeitet funktionieren würde!

Andere Tipps

Wenn zwei Clients auf den Server gleichzeitig aufruft, ist der Server höchstwahrscheinlich der Lage, beide Clients gleichzeitig fast zu antworten. Die Kunden hier definiere ich sie an den Browser-Ebene.

Bedeutung auf derselben Maschine zu sagen, dass, wenn Sie zwei Browser verwenden die gleiche Website / Seite zur gleichen Zeit zu laden, sollten beide zur gleichen Zeit geladen werden.

aber da wir reden über PHP, benötigen Sie spezielle Hinweise zu Sitzungen nehmen. Wenn Ihre Seiten-Sitzungen verwenden, nur der Server eine Seite zu einem Zeitpunkt, dienen. Dies liegt daran, Session-Datei gesperrt wird, bis ein Skript beendet.

Sehen Sie in diesem Beispiel. Die 2-Dateien werden von der gleichen Sitzung aka gleichen Browser gleichen Benutzer geladen.

      scripta.php requested                 scripta.php served
------+---+---------------------------------+------------------------>
          scripta.php started

               scriptb.php requested           scriptb.php started
---------------+-------------------------------+-----------------+--->
                                                                 scriptb.php served.

Beachten Sie, dass nur scriptb.php wird gestartet, nachdem scripta.php serviert wird. Dies liegt daran, wenn scripta.php gestartet, die Sitzungsdatei zu anderen Skripten gesperrt ist, so dass scripta.php auf die Sitzungsdatei schreiben kann. Wenn scripta.php abgeschlossen ist, ist die Session-Datei freigeschaltet und damit andere Skripte sind in der Lage, es zu benutzen. So wird scriptb.php warten, bis die Sitzungsdatei freigegeben wird, dann wird es die Session-Datei sperren und verwenden.

Dieser Prozess wird zu wiederholen hält mehrere Skripte zu verhindern, dass die gleichen Session-Datei schreiben zu Verzögerungen. Daher empfiehlt es sich, rufen Sie session_write_close (), wenn Sie nicht mehr die Sitzung mit, vor allem auf einer Website mit vielen iframes oder AJAX.

lief einfach in diese selbst. Grundsätzlich müssen Sie session_write_close() rufen einzelne Benutzer Sperren zu verhindern. Stellen Sie sicher, wenn Sie rufen session_write_close() Sie nicht versuchen und ändern, obwohl alle Session-Variablen. Sobald Sie es nennen, behandeln Sitzungen als schreibgeschützt von da an.

Wenn Sie einen sehr Nicht-Standard-Setup Ihres Web-Server ausgeführt werden (Apache, IIS, nginx, etc.) werden mehrere Prozesse, die für jede Anforderung PHP separat ausgeführt werden, die in den Server kommt. Gleichzeitige Anfragen gleichzeitig bedient werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top