WebSocket em Java: aplicações em tempo real de A a Z

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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:

  1. Cliente (navegador ou aplicativo móvel), que inicia a conexão.
  2. Servidor de aplicação (Java), que gerencia as sessões WebSocket.
  3. 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