Si le moteur PHP est déjà en train d'exécuter un script sur le serveur, qu'arriverait-il aux autres demandes de navigateur simultanées adressées au même script?
Le serveur, en fonction de sa configuration, peut généralement servir des centaines de requêtes en même temps - si vous utilisez Apache, le MaxClients
L'option de configuration est celle qui dit:
La directive
MaxClients
définit la limite du nombre de demandes simultanées qui seront traitées.
Toute tentative de connexion dépassant la limiteMaxClients
sera normalement mise en file d'attente, jusqu'à un nombre basé sur la directive ListenBacklog.
Une fois qu'un processus enfant est libéré à la fin d'une autre demande, la connexion sera alors entretenue.
Le fait que deux clients demandent la même page n'est pas un problème.
Alors :
Les demandes seront-elles mises en file d'attente?
Non ; sauf si :
MaxClients
processus actuellement actifs - voir la citation du manuel d'Apache juste avant.Seront-ils ignorés?
Non: cela signifierait qu'un seul utilisateur peut utiliser un site Web en même temps; ce ne serait pas tout à fait sympa, non?
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 répondait!
(Eh bien, SO n'est pas en PHP, mais les principes sont les mêmes)
Une autre possibilité?
Oui ^^
modifier après avoir modifié l'OP et le commentaire:
Chaque demande aura-t-elle sa propre instance de script?
Il n'y a rien de tel que " instance de script": en termes simples, ce qui se passe là où une demande de script est faite est:
Vraiment, vous pouvez avoir deux utilisateurs envoyant une demande au même PHP script (ou à distinct PHP scripts que tous inclure le même PHP); ce n'est définitivement pas un problème, ou aucun des sites Web sur lesquels j'ai travaillé ne fonctionnerait!
Si 2 clients appellent le serveur en même temps, le serveur est probablement en mesure 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. En effet, 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, alias même navigateur, même utilisateur.
scripta.php requested scripta.php served
------+---+---------------------------------+------------------------>
scripta.php started
scriptb.php requested scriptb.php started
---------------+-------------------------------+-----------------+--->
scriptb.php served.
Notez que scriptb.php n'est démarré qu'une fois scripta.php servi. En effet, 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. Une fois scripta.php terminé, le fichier de session est déverrouillé et les autres scripts peuvent donc l'utiliser. Ainsi scriptb.php attendra que le fichier de session soit libéré puis verrouillera le fichier de session et l'utilisera.
Ce processus continuera de se répéter pour éviter que plusieurs scripts écrivant dans le même fichier de session ne provoquent 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.
Je suis juste tombé dessus moi-même. Fondamentalement, 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'appelez, traitez les sessions en lecture seule à partir de ce moment.
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 demande qui arrive sur le serveur. Simultané les demandes seront traitées simultanément.