Skip to content

Endpoint /websocket

Configuration

Ewt supporte les WebSockets. Ils ne sont cependant activés qu'à la condition où le path de l'endpoint est défini. Pour ce faire, il existe deux solutions:

  1. Définir le path de l'endpoint au niveau du fichier web.xml à l'aide du paramètre de contexte websocket-endpoint-path. Cela se fait par exemple de la façon suivante (voir lignes en surbrillance):

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                                 http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0"
             metadata-complete="true">
    
        <!-- Initialisation -->
    
        <context-param>
            <param-name>application-root-path</param-name>
            <param-value>${env:EWT_APPLICATION_ROOT_PATH}</param-value>
        </context-param>
        <context-param>
            <param-name>websocket-endpoint-path</param-name>
            <param-value>/websocket</param-value>
        </context-param>
    
        <listener>
            <listener-class>ch.epilogic.ewt.core.EwtServletContextListener</listener-class>
        </listener>
    
      ...
    

    Attention, l'endpoint WebSocket n'est pas un servlet et ne doit pas être déclaré comme les autres servlets. En réalité l'endpoint est créé par Ewt à l'initialisation du moteur.

  2. Définir le path de l'endpoint via la propriété websocket-endpoint-path dans le fichier bootstrap d'Ewt.

    Dans le cas où la propriété est définie à la fois au niveau du web.xml et du fichier bootstrap, c'est la valeur de ce dernier qui prime.

Utilisation

Une URL de websocket peut prendre l'une des formes suivantes:

ws://host:port/ewt/websocket/application/script/session
ws://host:port/ewt/websocket/application/script/session/context

Les équivalents utilisant le scheme wss:// sont également disponibles, sous réserve que le serveur d'application soit correctement configuré.

La partie application attend le nom de l'application.

La partie script attend le nom du script qui prendra en charge les messages envoyés par le WebSocket.

La partie session attend l'identifiant de session que l'on retrouve dans l'arbre de sortie du moteur sous /output/session/@id. Cet élément est nécessaire pour identifier le sujet (utilisateur) et vérifier les autorisations.

La partie context attend l'identifiant de contexte que l'on retrouve dans l'arbre de sortie du moteur sous /output/documents/document/@context. Cet élément est optionnel. Il permet de lier les sessions WebSocket à un dossier en particulier.

L'ensemble des éléments application, script et context constituent un canal. Toutes les sessions qui se connectent à un même canal sont en quelque sorte liées. Par exemple dans le cas d'un chat, on peut voir le canal comme un groupe de discussion.

Exemple

Un exemple d'implémentation simple sous la forme d'un forum de discussion est donné dans la leçon websocket.