Biblioteca WebSocket Java: Tyrus — implementación de JSR 356 para 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
```html

Biblioteca WebSocket Java: Tyrus — implementación de referencia de JSR 356



En el desarrollo web moderno, la necesidad de comunicación bidireccional en tiempo real se ha convertido en un estándar. Aplicaciones de chat, juegos en línea, terminales de trading y sistemas de notificaciones — todos requieren que el servidor pueda iniciar el envío de datos al cliente sin constantes peticiones HTTP. Para el ecosistema Java, el estándar de facto es la especificación JSR 356 (Java API for WebSocket), y su implementación de referencia es la biblioteca Tyrus.



En la página pythonlib.ru a menudo revisamos herramientas para comunicaciones en tiempo real. Hoy analizaremos en detalle Tyrus — una biblioteca potente y flexible para trabajar con WebSocket en Java, que permite integrar fácilmente el intercambio bidireccional de datos en tus proyectos.



¿Qué es Tyrus y para qué sirve?



Tyrus es una implementación de código abierto (reference implementation) de la especificación JSR 356, desarrollada bajo el auspicio de Eclipse Foundation. Proporciona un conjunto completo de API para crear aplicaciones WebSocket tanto del lado del servidor como del cliente en Java. Las principales ventajas de Tyrus:



  • Total conformidad con el estándar JSR 356 — el código escrito con Tyrus se portará fácilmente a otras implementaciones (por ejemplo, Apache Tomcat, Jetty).
  • Soporte de anotaciones — enfoque minimalista: basta con añadir las anotaciones @ServerEndpoint o @ClientEndpoint a un POJO.
  • Flexibilidad — funciona tanto en contenedores de servlets (Tomcat, GlassFish) como en modo standalone (servidor integrado Grizzly).
  • Seguridad — soporte para WSS (WebSocket Secure) a través de sockets SSL estándar de Java.


Instalación y configuración de Tyrus



Para trabajar con Tyrus necesitarás añadir varias dependencias en pom.xml (Maven). La configuración básica incluye el núcleo de la biblioteca y la capa de transporte (Grizzly para modo standalone):



<!-- Dependencia principal de Tyrus --><dependency>    <groupId>org.glassfish.tyrus</groupId>    <artifactId>tyrus-server</artifactId>    <version>1.19</version></dependency>

<!-- Servidor integrado Grizzly para modo standalone --><dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-container-grizzly-server</artifactId> <version>1.19</version></dependency>

<!-- Parte cliente (si necesitas conectarte a otros servidores) --><dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-client</artifactId> <version>1.19</version></dependency>


Para Gradle (build.gradle):



implementation 'org.glassfish.tyrus:tyrus-server:1.19'implementation 'org.glassfish.tyrus:tyrus-container-grizzly-server:1.19'implementation 'org.glassfish.tyrus:tyrus-client:1.19'


Creación de un servidor WebSocket con Tyrus



La parte del servidor es una clase Java normal con la anotación @ServerEndpoint. Tyrus gestiona automáticamente el ciclo de vida de la conexión.



import javax.websocket.*;import javax.websocket.server.ServerEndpoint;import java.io.IOException;import java.util.Set;import java.util.concurrent.CopyOnWriteArraySet;

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

// Almacenamos todas las sesiones activas private static final Set<Session> sessions = new CopyOnWriteArraySet<>();

@OnOpen public void onOpen(Session session) { sessions.add(session); System.out.println("Nueva conexión: " + session.getId()); broadcast("Usuario " + session.getId() + " se ha unido al chat."); }

@OnMessage public void ```

Recommendations