Blue Flower

Chercher

Introduction de WebSocket

WebSocket est un protocole qui permet la communication entre le client et le serveur / endpoint en utilisant une seule connexion TCP. L'avantage de WebSocket par rapport à HTTP est que le protocole est en duplex intégral (permet une communication bidirectionnelle simultanée) et son en-tête est beaucoup plus petit que celui d'un en-tête HTTP, ce qui permet une communication plus efficace même sur de petits paquets de données.

Cycle de vie d'un WebSocket

Le cycle de vie d'un WebSocket est facile à comprendre:

  1. Le client envoie au serveur une demande d'établissement de liaison sous la forme d'un en-tête de mise à niveau HTTP avec des données sur le WebSocket auquel il tente de se connecter.
  2. Le serveur répond à la demande avec un autre en-tête HTTP, c'est la dernière fois qu'un en-tête HTTP est utilisé dans la connexion WebSocket. Si la négociation a réussi, le serveur envoie un en-tête HTTP indiquant au client qu'il passe au protocole WebSocket.
  3. Maintenant, une connexion constante est ouverte et le client et le serveur peuvent s'envoyer n'importe quel nombre de messages jusqu'à ce que la connexion soit fermée. Ces messages ont seulement environ 2 octets de surcharge.

L'API WebSocket a été introduite avec Java EE7, dans cet exemple, nous allons créer un client qui enverra un message au serveur et le serveur le renverra.

Exemple

 Server Endpoint

Le point de terminaison du serveur gérera les messages WebSocket entrants; il s’agit d’un objet Java (POJO) qui utilise les annotations de Java pour définir ses méthodes (cela peut être fait par programmation mais semble beaucoup plus propre en utilisant l’annotation).

Voici le code du "endpoint" du serveur:

import java.io.IOException ;

import javax.websocket.OnClose ;
import javax.websocket.OnMessage ;
import javax.websocket.OnOpen ;
import javax.websocket.Session ;
import javax.websocket.server.ServerEndpoint ;

/ **
* @ServerEndpoint donne le nom relatif du point final
* Ceci sera accessible via ws: // localhost: 8080 / EchoChamber / echo
* Où "localhost" est l'adresse de l'hôte,
* "EchoChamber" est le nom du package
* et "echo" est l'adresse pour accéder à cette classe depuis le serveur
* /
@ServerEndpoint ( "/ echo" )
classe publique EchoServer { / **

* @OnOpen nous permet d'intercepter la création d'une nouvelle session.
* La classe de session nous permet d'envoyer des données à l'utilisateur.
* Dans la méthode onOpen, nous ferons savoir à l'utilisateur que la poignée de main a été
* à succès.
* /
@OnOpen
public void onOpen ( Session session ) {
System.out.println ( session.getId ( ) + "a ouvert une connexion" ) ;
essayez {
session. getBasicRemote ( ).sendText ( "Connexion établie" ) ;
} catch ( IOException ex ) {
ex. printStackTrace ( ) ;
}
}

/ **
* Lorsqu'un utilisateur envoie un message au serveur, cette méthode intercepte le message
* et laissez-nous y réagir. Pour l'instant, le message est lu comme une chaîne.
* /
@OnMessage
public void onMessage ( String message, Session session ) {
System.out.println ( "Message de" + session.getId ( ) + ":" + message ) ;
essayez {
session. getBasicRemote ( ).sendText ( message ) ;
} catch ( IOException ex ) {
ex. printStackTrace () ;
}
}

/ **
* L'utilisateur ferme la connexion.
*
* Remarque: vous ne pouvez pas envoyer de messages au client à partir de cette méthode
* /
@OnClose
public void onClose ( Session session ) {
System.out.println ( "Session" + session.getId ( ) + "s'est terminée" ) ;
}
}

... 

à suivre ....