Comment les serveurs Web écoutent-ils les nouvelles demandes?
En vous renseignant sur les serveurs Web et leur fonctionnement, vous pourriez vous demander s'ils écoutent en permanence les demandes ou s'ils attendent jusqu'à ce qu'ils reçoivent une demande pour passer à l'action. C’est dans cet esprit que le poste de questions et d’usages de SuperUser d’aujourd’hui a les réponses pour satisfaire la curiosité du lecteur.
La séance de questions et réponses d'aujourd'hui nous est offerte par SuperUser, une sous-division de Stack Exchange, un groupe de sites Web de questions-réponses dirigé par la communauté..
Capture d'écran fournie par xmodulo / Captures d'écran Linux (Flickr).
La question
Le lecteur superutilisateur User2202911 souhaite savoir comment les serveurs Web écoutent les nouvelles demandes:
J'essaie de comprendre les détails plus détaillés du fonctionnement des serveurs Web. Je veux savoir si un serveur, par exemple Apache, recherche continuellement de nouvelles demandes ou s’il fonctionne avec une sorte de système d’interruption. Si c'est une interruption, qu'est-ce qui déclenche l'interruption? Est-ce le pilote de la carte réseau??
Comment un serveur Web écoute-t-il les nouvelles demandes??
La réponse
Le contributeur de SuperUser, Greg Bowser, a la solution pour nous:
La réponse courte est une sorte de système d'interruption. Ils utilisent essentiellement des E / S bloquantes, ce qui signifie qu'ils dorment (bloquent) en attendant de nouvelles données..
- Le serveur crée un socket en écoute, puis se bloque en attendant de nouvelles connexions. Pendant ce temps, le noyau met le processus dans une sommeil interruptible état et exécute d'autres processus. C'est un point important; avoir l'interrogation du processus en permanence gaspillerait des ressources de la CPU. Le noyau peut utiliser les ressources système plus efficacement en bloquant le processus jusqu'à ce qu'il y ait du travail à faire..
- Lorsque de nouvelles données arrivent sur le réseau, la carte réseau émet une interruption..
- Voyant qu'il y a une interruption de la carte réseau, le noyau, via le pilote de carte réseau, lit les nouvelles données de la carte réseau et les stocke en mémoire. (Ceci doit être fait rapidement et est généralement traité dans le gestionnaire d'interruptions.)
- Le noyau traite les données nouvellement arrivées et les associe à un socket. Un processus bloquant sur ce socket sera marqué comme exécutable, ce qui signifie qu'il est maintenant éligible pour être exécuté. Il ne s'exécute pas nécessairement immédiatement (le noyau peut décider d'exécuter d'autres processus)..
- À sa guise, le noyau réveillera le processus de serveur Web bloqué. (Depuis, il est maintenant exécutable.)
- Le processus du serveur Web continue de s'exécuter comme si aucun temps ne s'était écoulé. Son appel système bloquant revient et traite toutes les nouvelles données. Puis passez à l'étape 1.
Avez-vous quelque chose à ajouter à l'explication? Sound off dans les commentaires. Voulez-vous lire plus de réponses d'autres utilisateurs de Stack Exchange doués en technologie? Découvrez le fil de discussion complet ici.