Projet

Général

Profil

Actions

Feature #8622

fermé

Mise en place d'un système de notification PUSH du serveur vers le navigateur WEB

Ajouté par Yohann Chastagnier il y a environ 7 ans. Mis à jour il y a environ 7 ans.

Statut:
Closed
Priorité:
Normal
Assigné à:
Catégorie:
-
Début:
10/03/2017
Echéance:
% réalisé:

0%

Temps estimé:
Livraison en TEST:
Livraison en PROD:

Description

L'objectif de cette FEATURE est de mettre en place un système de notification qui permette au serveur d'envoyer des notifications vers le navigateur WEB, sans que ce dernier fasse une requête explicite.

Afin de mettre à l'épreuve ce système, une première notification sera implémentée afin de notifier les navigateurs WEB de tout changement de l'état des sessions utilisateurs gérées par Silverpeas.
Cette notifications permettra aux navigateurs WEB :
  • de mettre à jour le nombre d'utilisateurs connectés (au regard de l'isolement des domaines s'il en existe)
  • de rediriger l'utilisateur vers la page de login si sa session sur le navigateur est terminée

Demandes liées 2 (0 ouverte2 fermées)

Lié à Silverpeas Core - Feature #8789: Rendre plus dynamique les notifications reçues dans la Boîte de notifications des utilisateurs.ClosedYohann Chastagnier11/05/2017

Actions
Lié à Silverpeas Core - Feature #12908: Utilisation des WebSockets dans le système de notification PUSH du serveur vers le navigateur WEBClosedYohann Chastagnier25/02/2022

Actions

Mis à jour par Yohann Chastagnier il y a environ 7 ans

  • Statut changé de In progress... à Resolved

L'API SSE (Server Sent Event) a été retenue et implémentée dans Silverpeas.
Le serveur peut maintenant notifier le ou les navigateurs WEB (envois d'événements donc) et le navigateur peut de son côté écouter ces événements.

Les deux événements fonctionnels aujourd'hui envoyés sont les suivants :
  • USER_SESSION : cet événement est envoyé vers les navigateurs WEB à chaque connexion ou à chaque déconnexion (manuelle ou forcée) d'un utilisateur.
    Les données suivantes sont transmises via l'événement :
    {
      nbConnectedUsers : /* le nombre total d'utilisateurs connectés, au regard de l'isolement des domaines et du domaine de l'utilisateur qui reçoit l'événement */,
      isOpening : /* booléen qui indique si l'événement est envoyé suite à une connexion (true) (false ou undefined n'ont ici pas de réalité informationnelle). */,
      isClosing : /* booléen qui indique si l'événement est envoyé suite à une déconnexion (true) (false ou undefined n'ont ici pas de réalité informationnelle). */
    }
    
  • USER_SESSION_EXPIRED : cet événement est envoyé vers le navigateur WEB de l'utilisateur pour lequel une déconnexion (manuelle ou forcée) est effectuée.
    La donnée suivante est transmise via l'événement :
    {
      redirectUrl : /* l'url vers laquelle pointer suite à l'expiration de la session de l'utilisateur sur le navigateur WEB */
    }
    

Ces deux événements sont écoutables depuis l'URL /[URL de l'application, silverpeas autrement dit]/sse/common.
Exemple d'une implémentation de l'écoute de l'événement USER_SESSION dans Silverpeas :

spServerEventSource.addEventListener(
  'USER_SESSION',
  function(serverEvent) {
    var data = JSON.parse(serverEvent.data);
    alert('Il y a ' + data.nbConnectedUsers + ' utilisateur(s) connecté(s)');
  },
  'expiredUserSessionListener'
);

spServerEventSource est mis à disposition par SilverpeasLayout (créé dans le cadre du REDMINE #7909). Cette instance permet d'ajouter ou de supprimer facilement des écoutes d'événements communs de Silverpeas (les deux listés ci-dessus), via les méthodes :
  • addEventListener : ajout de l'écoute d'un événement, avec les paramètres :
    • serverEventName : le nom de l'événement écouté
    • listener : la fonction javascript a exécuter lors de la réception d'un événement, l'instance de l'événement est passé en premier paramètre
    • listenerId : un identifiant optionnel. Cet identifiant, s'il est transmis, permet de supprimer l'écoute précédemment mise en place avec le même identifiant
  • removeEventListener : suppression de l'écoute d'un événement, avec les paramètres :
    • serverEventName : le nom de l'événement écouté
    • listenerOrListenerId : function javascript à supprimer des écoutes ou identifiant de la fonction javascript à supprimer

Si le service ci-dessus (spServerEventSource) n'existait pas, il aurait fallu écrire :

var serverEventSource = new EventSource('/silverpeas/sse/common');
serverEventSource.addEventListener(
  'USER_SESSION',
  function(serverEvent) {
    var data = JSON.parse(serverEvent.data);
    alert('Il y a ' + data.nbConnectedUsers + ' utilisateur(s) connecté(s)');
  }
);


Quelques explications sur les Server Sent Event : https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events
Pour les navigateurs qui ne sont nativement pas compatibles avec cette API, il existe un polyfill que Silverpeas utilise naturellement : https://github.com/Yaffle/EventSource

Mis à jour par Nicolas Eysseric il y a environ 7 ans

  • Projet changé de 143 à Silverpeas Core
  • Version cible changé de 6.0 à Version 6

Mis à jour par Yohann Chastagnier il y a environ 7 ans

  • Statut changé de Resolved à Closed

Intégré.

Mis à jour par Yohann Chastagnier il y a presque 7 ans

  • Lié à Feature #8789: Rendre plus dynamique les notifications reçues dans la Boîte de notifications des utilisateurs. ajouté

Mis à jour par Yohann Chastagnier il y a environ 2 ans

  • Lié à Feature #12908: Utilisation des WebSockets dans le système de notification PUSH du serveur vers le navigateur WEB ajouté
Actions

Formats disponibles : Atom PDF