Biblioteca WebSocket Java: Tyrus — implementação JSR 356 para tempo real

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

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 @ServerEndpoint ou @ClientEndpoint a 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

Recommendations