Se o HTTP é síncrono, por que uma aplicação Web responde a várias solicitações ao mesmo tempo? Vamos entender o que acontece desde que o navegador faz uma solicitação HTTP, passa pelo IIS, é processado pela aplicação e retorna para o usuário.

HTTP e IIS

Como o HTTP é síncrono, mas meu site responde a muitas requisições de uma vez? Parece mágica, mas tem a ver com linhas de código e o jeito que o IIS gerencia tudo.

Nature

Uma conversa interessante:

  • Quando usar async?
  • Async é para operações de IO.
  • Então o HTTP é assíncrono?
  • Não, o HTTP é síncrono. Dá para acreditar?
  • Se é síncrono, por que responde várias requisições de uma vez?
  • O navegador faz várias requisições, e o IIS é que gerencia isso.
  • Então por que usar Task ou async Task na minha Controller?
  • Para melhorar a capacidade de resposta.

Vamos mergulhar no que é o IIS.

Este post será dividido em duas partes:

  1. Explorando como uma solicitação Web funciona com ASP.NET e IIS.
  2. Como as Actions assíncronas melhoram o uso das threads no Worker Process do IIS.

IIS

O IIS conecta a web e os usuários. Parece complexo? Na verdade, é só um servidor que escuta na porta 80.

http-webserver

Basicamente, é um "computador comum" que, rodando o IIS, vira um servidor. Escutar é a habilidade chave quando falamos de HTTP.

Protocolo HTTP

Temos o Cliente e o Servidor. Eles precisam de uma conexão e regras para se falarem (obrigado, TCP/IP).

Pense assim: o HTTP traz a mensagem e o TCP/IP garante que chegue.

tcpip

HTTP envia as mensagens e espera o melhor.

IIS não é ASP.NET

Surpresa! O IIS não se preocupa com ASP.NET, ele pode rodar páginas PHP também.

Arquitetura

HTTP.sys é como um super-herói discreto. Ele escuta na camada Kernel e entrega os pedidos para o IIS.

iis

Tem dois modos: Kernel e User. Um é o chefe, o outro ainda está aprendendo.

HTTP.sys coloca os pedidos na fila até que o Worker Process cuide deles. Se falta alguém, o WWW Service faz aparecer.

O WAS lê as configurações e prepara tudo.

Application Pool

Separa os apps como dois fãs de séries que não se entendem.

Worker Process

O Worker Process toma conta das solicitações no ASP.NET.

Processando Requisições

iisflow-1

O HTTP.sys captura a solicitação, o IIS processa, tudo isso com a ajuda dos Applications Pools.

O Worker Process lê a URL e decide: MVC? Ativa o HttpRuntime. ASP.NET Core? Usa o AspNetCoreModule.

isapi-filter

Depois, a resposta volta pelo HTTP.sys.

Conclusão

Agora que fizemos piadas, vamos falar sério. Antes de mergulhar em Async e Await no ASP.NET, conheça mais sobre o IIS.

Nos veremos na próxima parte, onde falaremos sobre Thread Pools e como a programação assíncrona ajuda no backend.

Tem dúvidas? Vamos conversar.

Parte 2 disponível!

Quer saber mais? Vá para a Parte 2

Referências