Tutorial Websocket JEE 7

Le 21/01/2015 Par Pierre Liseronjavascriptwildflywebsocketjee 7

Nous allons voir comment réaliser un websocket avec JEE7.

Pré-requis pour faire des websocket en JEE7

  • Avoir un eclipse configuré
  • Avoir un serveur d’application JEE7. Donc ce tutorial nous allons utilisé Widlfly 8.

Qu’est ce qu’un websocket

Si vous ne savez pas ce qu’est un websocket, commencer par lire l’article suivant.

Définition et cas d’utilisation d’un websocket

Création d’un websocket en Java JEE7

Premièrement il faut créer un projet Dynamic Web Project dans votre Eclipse. Un fois ce projet créer, rajouter une classe qui va jouer le rôle de endpoint. Pour configurer votre endpoint, en JEE7, il suffit d’annoter votre classe avec l’annotation

  @ServerEndpoint<span class="s1">(</span><span class="s2">« /websocket »</span><span class="s1">)</span>

Ici notre path depuis le contextroot de l’application sera websocket mais on peut configurer n’importe quoi. Si votre projet ne compile pas, il se peut si vous n’utilisez pas maven que vous ayez besoin de rajouter dans votre classpath les lib (disponibles dans le serveur wildfly->modules) suivantes: jboss-websocket-api_1.0_spec-1.0.0.Final.jar

Une fois votre classe annotée, il suffit de définir trois méthodes et de les annoter de la manière suivante:

AnnotationDescriptionExemple
@OnMessageQui est la méthode qui va recevoir les messagespublic String hello(String pMessage)
@OnOpenUne méthode qui sera appelée lors de l’ouverture du socketpublic void onOpen(Session pSession)
@OnCloseUne méthode qui sera appelée lors de la ferture du socketpublic void onClose(CloseReason pCloseReason)

Maintenant que vous avez une méthode @OnMessage, il vous suffit de traiter le paramètre envoyé par le client, à savoir pMessage. Ici on utilise un String mais on pourrait travailler avec d’autres types de variables. Pour la suite, il vous suffit de déployer votre application sur votre serveur WildflyWildfly est un serveur d'application Java (on peut le faire directement depuis la vue eclipse->server)

Envoye d’un message depuis le serveur (push)

 

Pour envoyer un message depuis le serveur, il suffit d’utiliser la session. Depuis une session, on peut facilement faire la chose suivante:

session.getBasicRemote().sendText(<span class="s2">« Mon message »</span>);

On se rend compte qu’il est donc important de garder l’intégralité des sessions des clients pour pouvoir par la suite leur envoyer des messages. Encore une fois, rien de plus simple, il suffit dans l’ouverture (et le fermeture) de garder à jour la liste des sessions.

  <span class="s1">private</span> <span class="s1">static</span> Set<Session> <span class="s2">clients</span> = Collections.synchronizedSet(<span class="s1">new</span> HashSet<Session>());

Grace à l’APIUne API est un programme permettant à deux applications distinctes de communiquer entre elles et d’échanger des données. collections, on peut créer un ensemble (SET) synchronisé de session. Il suffit ensuite de rajouter et de supprimer les sessions lors de la méthode d’ouverture et de fermeture de la session du socket.

WebSocket Tutorial Côté client

Pour le client, nous allons utiliser JAVASCRIPT pour créer notre client.

Sur la plupart des navigateur récent, les websockets sont très bien supportés: http://caniuse.com/#feat=websockets

On va donc dans un script JS créer notre adresse du serveur

var uri = « ws://localhost:8080/formation-wildfly/websocket »;

Ici rien de plus simple:

function init() {
	websocket = new WebSocket(wsUri);
	websocket.onopen = function(evt) {
			onOpen(evt)
			};
			websocket.onmessage = function(evt) {
				onMessage(evt)
			};
			websocket.onerror = function(evt) {
				onError(evt)
			};

	}
	function onOpen(evt) {
	}
	function onMessage(evt) {
		alert("Message reçu: " + evt.data );
	}

	function onError(evt) {
	}

Il suffit comme en JAVA de binder les trois méthodes utiles.

Dernière choses à savoir, comment envoyer un message depuis le client, tout simplement en appeler depuis l’objet websocket la méthode d’envoi de message:

java websocket.send(message);

Sommaire

  • fleche vers la droite Pré-requis pour faire des websocket en JEE7
  • fleche vers la droite Qu’est ce qu’un websocket
  • fleche vers la droite Création d’un websocket en Java JEE7
  •         fleche vers la droite Envoye d’un message depuis le serveur (push)
  • fleche vers la droite WebSocket Tutorial Côté client

À voir aussi

Tous les articles