Quando vocĂȘ abre um site, existe um processo em execução esperando por sua conexĂŁo. Esse mesmo processo precisa atender usuĂĄrios espalhados pelo mundo inteiro, simultaneamente, de maneira rĂĄpida, segura e organizada.
O servidor web (Apache, Nginx, IIS, etc.) inicia um processo que permanece executando continuamente na memória do sistema operacional aguardando conexÔes.
Esse processo cria um socket e fica escutando uma porta TCP (normalmente 80 ou 443), esperando que clientes iniciem conexÔes.
Durante praticamente toda sua vida Ăștil o servidor permanece bloqueado na chamada accept(), aguardando novas conexĂ”es.
Ao receber uma conexĂŁo, o servidor pode criar uma nova thread. Cada thread atende um cliente independentemente das demais.
Alguns servidores criam processos independentes para tratar diferentes clientes, aumentando isolamento e segurança.
Servidores modernos utilizam eventos e chamadas nĂŁo bloqueantes, permitindo que um Ășnico processo administre milhares de conexĂ”es.
Em vez de criar novas threads continuamente, o servidor mantém um conjunto de workers prontos para receber novas conexÔes.
INTERNET
Cliente A
â
Cliente B
â
Cliente C
â
Cliente D
â
âŒ
+--------------------+
| Socket TCP :80 |
+--------------------+
â
accept()
â
+-------------------+
| Processo Servidor |
+-------------------+
â â â
â â â
⌠⌠âŒ
Worker1 Worker2 Worker3
â â â
⌠⌠âŒ
Resposta Resposta Resposta
Vårias conexÔes podem estar abertas simultaneamente sem que uma bloqueie a outra.
O sistema operacional distribui threads e processos entre os nĂșcleos da CPU.
Cada navegador possui seu prĂłprio socket TCP. O servidor diferencia todos utilizando pares IP:Porta.
Servidores modernos conseguem manter dezenas ou centenas de milhares de conexÔes abertas simultaneamente.