Biblioteca WebSocket Java: Tyrus — implementação de referência do JSR 356
No desenvolvimento web moderno, a necessidade de comunicação bidirecional em tempo real tornou-se padrão. Aplicativos de chat, jogos online, terminais de negociação e sistemas de notificação — todos exigem que o servidor possa iniciar o envio de dados ao cliente sem requisições HTTP constantes. Para o ecossistema Java, o padrão de facto é a especificação JSR 356 (Java API for WebSocket), e sua implementação de referência é a biblioteca Tyrus.
Na página pythonlib.ru, frequentemente analisamos ferramentas para comunicações em tempo real. Hoje, vamos detalhar o Tyrus — uma biblioteca poderosa e flexível para trabalhar com WebSocket em Java, que permite incorporar facilmente a troca bidirecional de dados em seus projetos.
O que é Tyrus e por que ele é necessário?
Tyrus é uma implementação aberta (reference implementation) da especificação JSR 356, desenvolvida sob a égide da Eclipse Foundation. Ela fornece um conjunto completo de APIs para criar aplicações WebSocket tanto do lado do servidor quanto do cliente em Java. As principais vantagens do Tyrus:
- Conformidade total com o padrão JSR 356 — o código escrito com Tyrus será facilmente portável para outras implementações (por exemplo, Apache Tomcat, Jetty).
- Suporte a anotações — abordagem minimalista: basta adicionar as anotações
@ServerEndpointou@ClientEndpointa um POJO. - Flexibilidade — funciona tanto em contêineres de servlets (Tomcat, GlassFish) quanto em modo standalone (servidor embutido Grizzly).
- Segurança — suporte a WSS (WebSocket Secure) através de sockets SSL Java padrão.
Instalação e configuração do Tyrus
Para trabalhar com Tyrus, você precisará adicionar algumas dependências ao pom.xml (Maven). A configuração básica inclui o núcleo da biblioteca e a camada de transporte (Grizzly para modo standalone):
<!-- Dependência principal do Tyrus --><dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-server</artifactId> <version>1.19</version></dependency>
<!-- Servidor embutido Grizzly para modo standalone --><dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-container-grizzly-server</artifactId> <version>1.19</version></dependency>
<!-- Parte cliente (se precisar conectar a outros 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'Criando um servidor WebSocket com Tyrus
A parte do servidor é uma classe Java comum com a anotação @ServerEndpoint. O Tyrus gerencia automaticamente o ciclo de vida da conexão.
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 {
// Armazena todas as sessões ativas private static final Set<Session> sessions = new CopyOnWriteArraySet<>();
@OnOpen public void onOpen(Session session) { sessions.add(session); System.out.println("Nova conexão: " + session.getId()); broadcast("Usuário " + session.getId() + " entrou no chat."); }
@OnMessage public void Também na biblioteca
Métricas Prometheus em C# (.NET): integração e configuração
Filas de Tarefas em Java: ExecutorService e ThreadPoolExecutor
EventKit para Swift: guia completo com exemplos práticos
Cache em PHP: Redis, Memcached e APCu — guia completo
Agendador de tarefas em TypeScript: guia completo sobre bibliotecas cron e temporizadores