Skip to content

Jak serwery internetowe nasłuchują nowych żądań?

22 de lipiec de 2021
how do web servers listen for new requests 00

Ucząc się o serwerach internetowych i ich działaniu, możesz być ciekawy, czy stale nasłuchują żądań, czy czekają, aż otrzymają prośbę o podjęcie działania. Mając to na uwadze, dzisiejszy post z pytaniami i odpowiedziami dla SuperUser zawiera odpowiedzi, które zaspokoją ciekawość czytelnika.

Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser — pododdziału Stack Exchange, społecznościowej grupy witryn internetowych z pytaniami i odpowiedziami.

Zrzut ekranu dzięki uprzejmości Zrzuty ekranu xmodulo/Linux (Flickr).

Pytanie

Czytnik SuperUser user2202911 chce wiedzieć, jak serwery internetowe nasłuchują nowych żądań:

Próbuję zrozumieć szczegóły działania serwerów WWW na 'głębszym poziomie’. Chcę wiedzieć, czy serwer, na przykład Apache, stale odpytuje nowe żądania, czy też działa przez jakiś system przerwań. Jeśli to przerwanie, co powoduje przerwanie? Czy to sterownik karty sieciowej?

W jaki sposób serwer WWW nasłuchuje nowych żądań?

Odpowiedź

Współtwórca SuperUser Greg Bowser ma dla nas odpowiedź:

Krótka odpowiedź to jakiś system przerwań. Zasadniczo używają blokowanie we/wy, co oznacza, że ​​śpią (blokują się), czekając na nowe dane.

  1. Serwer tworzy gniazdo nasłuchujące, a następnie blokuje w oczekiwaniu na nowe połączenia. W tym czasie jądro umieszcza proces w przerywany sen stan i uruchamia inne procesy. To jest ważny punkt; ciągłe odpytywanie procesu spowodowałoby marnowanie zasobów procesora. Jądro jest w stanie efektywniej korzystać z zasobów systemowych, blokując proces do czasu, aż pojawi się praca do wykonania.
  2. Gdy do sieci dotrą nowe dane, karta sieciowa generuje przerwanie.
  3. Widząc, że istnieje przerwanie z karty sieciowej, jądro, poprzez sterownik karty sieciowej, odczytuje nowe dane z karty sieciowej i przechowuje je w pamięci. (Musi to być zrobione szybko i jest zwykle obsługiwane wewnątrz programu obsługi przerwań).
  4. Jądro przetwarza nowo otrzymane dane i kojarzy je z gniazdem. Proces, który blokuje w tym gnieździe, zostanie oznaczony jako uruchamialny, co oznacza, że ​​można go teraz uruchomić. Niekoniecznie uruchamia się natychmiast (jądro może zdecydować się na uruchomienie innych procesów).
  5. W wolnym czasie jądro obudzi zablokowany proces serwera WWW. (Ponieważ można go teraz uruchomić.)
  6. Proces serwera WWW kontynuuje wykonywanie, jakby nie minął żaden czas. Jego blokujące wywołanie systemowe powraca i przetwarza wszelkie nowe dane. Następnie przejdź do kroku 1.

Masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych doświadczonych technologicznie użytkowników Stack Exchange? Sprawdź pełny wątek dyskusji tutaj.

Czy ten post był pomocny?