Bibliothèque WebSocket Java : Guide complet pour le développement d'applications en temps réel
WebSocket est un protocole assurant une communication bidirectionnelle entre le client et le serveur via une seule connexion TCP persistante. En Java, il existe plusieurs bibliothèques matures qui simplifient le travail avec WebSocket. Dans cet article, nous examinerons les principales bibliothèques, leurs fonctionnalités et fournirons des exemples de code pratiques.
1. Java WebSocket API (JSR 356)
API standard pour travailler avec WebSocket dans Java EE / Jakarta EE. Elle fait partie des serveurs d'applications (WildFly, TomEE, GlassFish) et permet de créer des points de terminaison côté serveur et côté client.
Fonctionnalités principales :
- Annotations
@ServerEndpointet@ClientEndpoint - Prise en charge des messages textuels et binaires
- Gestion des sessions et du cycle de vie
- Intégration avec CDI (Contexts and Dependency Injection)
Exemple de point de terminaison serveur :
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("Nouvelle connexion : " + session.getId()); session.getUserProperties().put("username", "Invité"); }
@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("Connexion fermée : " + reason.getReasonPhrase()); }
@OnError public void onError(Session session, Throwable error) { error.printStackTrace(); }}Exemple de client :
import javax.websocket.*;import java.net.URI;
@ClientEndpointpublic class ChatClient {
private Session session;
@OnOpen public void onOpen(Session session) { System.out.println("Connecté au serveur"); this.session = session; }
@OnMessage public void onMessage(String message) { System.out.println("Reçu : " + 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("Bonjour le monde !"); Thread.sleep(1000); }}2. Tyrus (Implémentation de référence)
Tyrus est l'implémentation de référence de JSR 356 par Oracle. Elle peut être utilisée comme bibliothèque autonome sans serveur d'applications complet. Idéale pour les microservices et les applications légères.
Caractéristiques :
- Fonctionne avec Grizzly, Jetty ou le serveur HTTP JDK
- Prise en charge de SockJS pour la compatibilité avec les navigateurs sans WebSocket
- Filtres et intercepteurs personnalisables
- Configuration flexible via XML ou Java Config
Exemple de serveur autonome avec 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 "Écho : " + message; }
public static void main(String[] args) { Server server = new Server("localhost", 8025, "/ws", EchoEndpoint.class); try { Aussi dans la bibliothèque
SwiftFormat Swift : guide complet avec exemples
Event Bus et le pattern Observer en PHP : implémentation et exemples