Série Java Networking · 02
Cliente e servidor TCP: como o servidor atende a ligação
Socket socket = new Socket("10.0.0.7", 8080); // o cliente liga pro servidor01 / 06
TCP é uma ligação que fica aberta
Um lado liga, o outro atende e a linha fica aberta até alguém desligar. No caminho, o TCP numera os pedaços: se o 2 se perde, ele é reenviado, e a aplicação só recebe tudo na ordem certa.
Use ← e → pra trocar de cena, espaço pra pausar.
Pra fixar
- TCP: a conexão fica aberta, os pedaços chegam em ordem e o que se perde é reenviado.
- Bloqueante: uma thread por conexão, parada no accept() e no read().
- O custo é a espera: cada thread reserva memória de stack mesmo parada.
- NIO: um Selector avisa quais sockets estão prontos, e poucas threads atendem muitas conexões.
- Tomcat (conector NIO) e Netty já fazem esse trabalho por baixo do framework.
- Virtual Threads (Java 21): código bloqueante, mas a espera não prende uma thread do SO.
Bloqueante, mas com Virtual Threads
try (var server = new ServerSocket(8080);
var executor = Executors.newVirtualThreadPerTaskExecutor()) {
while (true) {
Socket client = server.accept(); // waits for a call
executor.submit(() -> handle(client)); // one virtual thread per client
}
}
Caramelo