WebSocket en Java: aplicaciones en tiempo real de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Por qué WebSocket se convirtió en el estándar de las comunicaciones en tiempo real

Las aplicaciones web modernas requieren una reacción instantánea a los eventos. Ya sea un chat, un terminal bursátil o un juego multijugador, los usuarios esperan que los datos se actualicen sin recargar la página. El HTTP tradicional (API REST) con su modelo de "solicitud-respuesta" es ineficiente para estas tareas: el cliente se ve obligado a consultar constantemente al servidor (polling), lo que genera una carga y retrasos innecesarios.

La solución a este problema es el protocolo WebSocket, que establece una conexión bidireccional permanente entre el cliente y el servidor. En este artículo, analizaremos WebSocket en Java desde los conceptos básicos hasta la creación de una aplicación completa en tiempo real. Aprenderá a configurar el servidor, escribir el cliente y manejar errores.



Fundamentos de WebSocket: cómo funciona

Diferencia con HTTP

WebSocket es un protocolo que funciona sobre TCP. Comienza como una solicitud HTTP (handshake), después de lo cual la conexión se "actualiza" (upgrade) a un canal bidireccional permanente. A diferencia de HTTP, donde cada solicitud requiere una nueva conexión, WebSocket la mantiene abierta, permitiendo que el servidor envíe datos al cliente de forma autónoma (modelo push).

Ventajas principales:

  • Baja latencia — los datos se transmiten instantáneamente sin handshakes repetidos.
  • Menos tráfico — encabezado mínimo (solo 2-14 bytes) frente a cientos de bytes en HTTP.
  • Bidireccionalidad — tanto el cliente como el servidor pueden iniciar el envío de datos.


Arquitectura de una aplicación en tiempo real en Java

Una aplicación típica consta de tres componentes:

  1. Cliente (navegador o aplicación móvil), que inicia la conexión.
  2. Servidor de aplicaciones (Java), que gestiona las sesiones WebSocket.
  3. Backend (base de datos, colas de mensajes), que procesa la lógica de negocio.

Java proporciona potentes herramientas para trabajar con WebSocket, tanto del lado del servidor (Jakarta WebSocket, Spring WebSocket) como del lado del cliente (API estándar de Java WebSocket).



Creación de un servidor WebSocket en Java

Preparación del entorno

Para la parte del servidor, usaremos Jakarta WebSocket (anteriormente Java EE WebSocket). Esta es una API estándar que forma parte de Jakarta EE. Necesitará:

  • JDK 11 o superior.
  • Un servidor de aplicaciones (por ejemplo, Apache Tomcat 10 o GlassFish 7).
  • Maven para la gestión de dependencias.

Añada la dependencia en pom.xml:

<dependency>    <groupId>jakarta.websocket</groupId>    <artifactId>jakarta.websocket-api</artifactId>    <version>2.1.0</version>    <scope>provided</scope></dependency>


Escritura del endpoint WebSocket

Creemos un servidor echo simple que devuelva el mensaje recibido:

import jakarta.websocket.*;import jakarta.websocket.server.ServerEndpoint;

@ServerEndpoint("/chat")public class ChatEndpoint {

@OnOpen public void onOpen(Session session) { System.out.println("Nueva conexión: " + session.getId()); }

@OnMessage public String onMessage(String message, Session session) { System.out.println("Recibido de " + session.getId() + ": " + message); return "Eco: " + message; }

@OnClose public void onClose(Session session, CloseReason reason) { System.out.println("Conexión cerrada: " + session.getId() + " por motivo: " + reason.getReasonPhrase()); }

@OnError public void onError(Session session, Throwable error) { System.err.println("Error en la sesión " + session.getId() + ": " + error.getMessage()); }}

La anotación @ServerEndpoint("/chat")

Blogs

Book Recommendations