Si le moteur PHP est déjà en train d'exécuter un script sur le serveur, qu'arriverait-il aux autres requêtes simultanées du navigateur sur le même script?
- Les demandes seront-elles mises en file d'attente?
- Seront-ils ignorés?
- Chaque requête aura-t-elle sa propre instance de script?
- Une autre possibilité?
Réponses:
Le serveur, en fonction de sa configuration, peut généralement servir des centaines de demandes en même temps - si vous utilisez Apache, l'
MaxClients
option de configuration est celle qui dit:Le fait que deux clients demandent la même page n'est pas un problème.
Donc :
Non ; sauf si :
MaxClients
les processus actuellement actifs - voir la citation du manuel d'Apache juste avant.Non: cela signifierait qu'un seul utilisateur peut utiliser un site Web à la fois; ce ne serait pas très bien, n'est-ce pas?
Si c'était le cas, je ne pourrais pas poster cette réponse, si vous frappiez F5 au même moment pour voir si quelqu'un a répondu!
(Eh bien, SO n'est pas en PHP, mais les principes sont les mêmes)
Oui ^^
modifier après avoir édité l'OP et le commentaire:
Il n'y a pas de " instance de script ": en termes simples, ce qui se passe là où une requête à un script est faite est:
Vraiment, vous pouvez avoir deux utilisateurs qui envoient une requête au même script PHP (ou à des scripts PHP distincts qui incluent tous le même fichier PHP) ; ce n'est certainement pas un problème, ou aucun des sites Web sur lesquels j'ai travaillé ne fonctionnerait!
la source
Si 2 clients appellent le serveur en même temps, le serveur est très probablement capable de répondre aux deux clients presque simultanément. Les clients ici, je les définis au niveau du navigateur.
Cela signifie que sur la même machine, si vous utilisez 2 navigateurs pour charger le même site Web / page en même temps, les deux doivent être chargés en même temps.
cependant, puisque nous parlons de PHP, vous devez prendre des notes spéciales sur les sessions. Si vos pages utilisent des sessions, le serveur ne sert qu'une seule page à la fois. Cela est dû au fait que le fichier de session sera verrouillé jusqu'à ce qu'un script se termine.
Regardez cet exemple. Les 2 fichiers sont chargés à partir de la même session aka même navigateur même utilisateur.
Notez que scriptb.php n'est démarré qu'après la diffusion de scripta.php. c'est parce que lorsque scripta.php a démarré, le fichier de session est verrouillé sur d'autres scripts afin que scripta.php puisse écrire dans le fichier de session. Lorsque scripta.php se termine, le fichier de session est déverrouillé et d'autres scripts peuvent donc l'utiliser. Ainsi, scriptb.php attendra que le fichier de session soit libéré, puis il verrouille le fichier de session et l'utilise.
Ce processus continuera à se répéter pour empêcher l'écriture de plusieurs scripts dans le même fichier de session entraînant des retards. Il est donc recommandé d'appeler
session_write_close
() lorsque vous n'utilisez plus la session, en particulier sur un site web utilisant de nombreux iframes ou AJAX.la source
Je suis tombé dessus moi-même. En gros, vous devez appeler
session_write_close()
pour empêcher le verrouillage d'un seul utilisateur. Assurez-vous qu'une fois que vous appelez,session_write_close()
vous n'essayez pas de modifier les variables de session. Une fois que vous l'avez appelé, traitez les sessions en lecture seule à partir de là.la source
Sauf si vous exécutez une configuration très non standard, votre serveur Web (Apache, IIS, nginx, etc.) aura plusieurs processus qui exécutent PHP séparément pour chaque requête qui arrive sur le serveur. Les demandes simultanées seront traitées simultanément.
la source