Bibliotecas WebSocket de Java: Guía completa para implementación en tiempo real

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

Biblioteca WebSocket de Java: Guía completa para desarrollo de aplicaciones en tiempo real

WebSocket es un protocolo que proporciona comunicación bidireccional entre cliente y servidor a través de una única conexión TCP de larga duración. En Java existen varias bibliotecas maduras que simplifican el trabajo con WebSocket. En este artículo revisaremos las principales bibliotecas, sus capacidades y proporcionaremos ejemplos prácticos de código.



1. Java WebSocket API (JSR 356)

API estándar para trabajar con WebSocket en Java EE / Jakarta EE. Forma parte de los servidores de aplicaciones (WildFly, TomEE, GlassFish) y permite crear tanto puntos finales de servidor como de cliente.

Capacidades principales:

  • Anotaciones @ServerEndpoint y @ClientEndpoint
  • Soporte para mensajes de texto y binarios
  • Gestión de sesiones y ciclo de vida
  • Integración con CDI (Contexts and Dependency Injection)

Ejemplo de endpoint de servidor:

import javax.websocket.*;import javax.websocket.server.ServerEndpoint;import java.io.IOException;

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

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

@OnMessage public String onMessage(String message, Session session) { String username = (String) session.getUserProperties().get("username"); return username + ": " + message; }

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

@OnError public void onError(Session session, Throwable error) { error.printStackTrace(); }}

Ejemplo de cliente:

import javax.websocket.*;import java.net.URI;

@ClientEndpointpublic class ChatClient {

private Session session;

@OnOpen public void onOpen(Session session) { System.out.println("Conectado al servidor"); this.session = session; }

@OnMessage public void onMessage(String message) { System.out.println("Recibido: " + message); }

public void sendMessage(String message) throws IOException { if (session != null && session.isOpen()) { session.getBasicRemote().sendText(message); } }

public static void main(String[] args) throws Exception { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); ChatClient client = new ChatClient(); container.connectToServer(client, new URI("ws://localhost:8080/chat")); client.sendMessage("¡Hola, mundo!"); Thread.sleep(1000); }}


2. Tyrus (Implementación de Referencia)

Tyrus es la implementación de referencia de JSR 356 de Oracle. Puede usarse como biblioteca independiente sin un servidor de aplicaciones completo. Ideal para microservicios y aplicaciones ligeras.

Características:

  • Funciona con Grizzly, Jetty o el servidor HTTP JDK
  • Soporte para SockJS para compatibilidad con navegadores sin WebSocket
  • Filtros e interceptores configurables
  • Configuración flexible mediante XML o Java Config

Ejemplo de servidor independiente con Tyrus + Grizzly:

import org.glassfish.tyrus.server.Server;import javax.websocket.*;import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/echo")public class EchoEndpoint {

@OnMessage public String echo(String message) { return "Eco: " + message; }

public static void main(String[] args) { Server server = new Server("localhost", 8025, "/ws", EchoEndpoint.class); try {

Recommendations