Introdução: Por que o WebSocket se tornou o padrão para comunicações em tempo real
As aplicações web modernas exigem reação instantânea a eventos. Seja um chat, um terminal de bolsa de valores ou um jogo multiplayer — os usuários esperam que os dados sejam atualizados sem recarregar a página. O HTTP tradicional (API REST) com seu modelo "requisição-resposta" é ineficiente para essas tarefas: o cliente é forçado a consultar constantemente o servidor (polling), o que cria carga e latência desnecessárias.
A solução para esse problema é o protocolo WebSocket, que estabelece uma conexão bidirecional permanente entre o cliente e o servidor. Neste artigo, abordaremos o WebSocket em Java desde os fundamentos até a criação de uma aplicação completa em tempo real. Você aprenderá como configurar o servidor, escrever o cliente e tratar erros.
Fundamentos do WebSocket: como funciona
Diferença do HTTP
WebSocket é um protocolo que opera sobre TCP. Ele começa como uma requisição HTTP (handshake), após a qual a conexão é "atualizada" (upgrade) para um canal bidirecional permanente. Ao contrário do HTTP, onde cada requisição exige uma nova conexão, o WebSocket a mantém aberta, permitindo que o servidor envie dados ao cliente de forma autônoma (modelo push).
Principais vantagens:
- Baixa latência — os dados são transmitidos instantaneamente sem handshakes repetidos.
- Menor tráfego — cabeçalho mínimo (apenas 2-14 bytes) contra centenas de bytes no HTTP.
- Bidirecionalidade — tanto o cliente quanto o servidor podem iniciar o envio de dados.
Arquitetura de uma aplicação em tempo real em Java
Uma aplicação típica consiste em três componentes:
- Cliente (navegador ou aplicativo móvel), que inicia a conexão.
- Servidor de aplicação (Java), que gerencia as sessões WebSocket.
- Backend (banco de dados, filas de mensagens), que processa a lógica de negócios.
O Java fornece ferramentas poderosas para trabalhar com WebSocket — tanto no lado do servidor (Jakarta WebSocket, Spring WebSocket) quanto no lado do cliente (API Java WebSocket padrão).
Criação de um servidor WebSocket em Java
Preparação do ambiente
Para a parte do servidor, usaremos o Jakarta WebSocket (anteriormente Java EE WebSocket). Esta é uma API padrão que faz parte do Jakarta EE. Você precisará de:
- JDK 11 ou superior.
- Servidor de aplicação (por exemplo, Apache Tomcat 10 ou GlassFish 7).
- Maven para gerenciamento de dependências.
Adicione a dependência no pom.xml:
<dependency> <groupId>jakarta.websocket</groupId> <artifactId>jakarta.websocket-api</artifactId> <version>2.1.0</version> <scope>provided</scope></dependency>Escrevendo um endpoint WebSocket
Vamos criar um servidor echo simples, que envia de volta a mensagem recebida:
import jakarta.websocket.*;import jakarta.websocket.server.ServerEndpoint;
@ServerEndpoint("/chat")public class ChatEndpoint {
@OnOpen public void onOpen(Session session) { System.out.println("Nova conexão: " + session.getId()); }
@OnMessage public String onMessage(String message, Session session) { System.out.println("Recebido de " + session.getId() + ": " + message); return "Echo: " + message; }
@OnClose public void onClose(Session session, CloseReason reason) { System.out.println("Conexão fechada: " + session.getId() + " pelo motivo: " + reason.getReasonPhrase()); }
@OnError public void onError(Session session, Throwable error) { System.err.println("Erro na sessão " + session.getId() + ": " + error.getMessage()); }}A anotação @ServerEndpoint("/chat")
Blogs
Book Recommendations
Leia também
Trabalho com arquivos em Swift: da abertura à criptografia
Segurança de aplicações C#: top 10 vulnerabilidades na prática
Arquitetura Limpa em JavaScript: Dominando o Hexagonal na Prática
Por que mysql_* em PHP é um mal: análise completa com exemplos
Por que o PHP ainda está vivo e popular: história, código e razões do sucesso