IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Server push Comment faire?


Sujet :

Servlets/JSP Java

  1. #1
    Membre éprouvé Avatar de scandinave
    Homme Profil pro
    Développeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 919
    Points
    919
    Par défaut Server push Comment faire?
    Bonjour, j'essaye de mettre en place un système de server push pour mettre à jour l'écran de tout les utilisateurs lors d'une action d'un des utilisateurs et ceux sans avoir à recharger la page ou à faire du long pooling en ajax. Je ne peut installer de serveur autre que jonas donc exit les websockets.

    j'arrive jusqu’à présent à contacter une servlet et lui faire renvoyer l'heure comme tout les exemple qu'on trouve sur le net.

    Enfin bon renvoyer l'heure toute les secondes ne va pas me servir à grand chose et je ne voit pas la différence avec du long polling.

    En fait ma connexion s'ouvre , récupère l'heure et se ferme, et ainsi de suite. Mais aucune connexion ne reste ouverte plus de 1 s ce qui est embetant.

    voici mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    $(document)ready(function() {
         if(!!window.EventSource) {
              console.log("eventSource supporté");
              var source = new EventSource("urlDeMaServlet");
     
              source.addEventListener("message", function(e) {
                    console.log(e.data);
              }, false);
     
              source.addEventListener("open", function(e) {
                   console.log("connexion ouverte");
              }, false);
     
              source.addEventListener("error", function(e) {
                  if (e.readyState == EventSource.CLOSED) {
                         console.log("connexion fermée");
                  }
                  else {
                        console.log("erreur");
                 }
              },false);
        }
     
        else {
             console.log("eventSource non supporté");
        }
    });

    et voici le code coté server en java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    response.setContentType("text/event-stream");
    response.setCaractereEncoding("UTF-8");
    response.setHeader("Cache-control", "no-cache");
    printWriter output = response.getWriter();
    String data = "retry : 1000\n";
    data += "data : Server time  " + new Date() + "\n\n";
    output.write(data);
    Donc avec le code que j'ai la la connexion se ferme au bout d'1s en erreur après avoir récupéré une fois l'heure .
    Et je ne sais pas comment faire pour garder la connexion ouverte et n'envoyer des données que quand un utilisateur réalise une action sur le site.

  2. #2
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 387
    Points : 3 535
    Points
    3 535
    Billets dans le blog
    1
    Par défaut
    Je ne peut installer de serveur autre que jonas donc exit les websockets
    Tu ne peux pas passer par un service tiers non plus ?

    J'ai testé pusher.com par exemple, ça marche plutôt bien.

  3. #3
    Membre éprouvé Avatar de scandinave
    Homme Profil pro
    Développeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 919
    Points
    919
    Par défaut
    non pas d'accès à internet pour ce projet. Donc impossible .

  4. #4
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 387
    Points : 3 535
    Points
    3 535
    Billets dans le blog
    1
    Par défaut
    ok, je suis toujours passé par des services tiers pour faire du push.. je ne pourrait pas t'aider plus, bon courage

  5. #5
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Points : 3 736
    Points
    3 736
    Par défaut
    hum, en fait, je vois pas trop comment faire du push en http sans passer par du long pooling ou des websocket

  6. #6
    Membre éprouvé Avatar de scandinave
    Homme Profil pro
    Développeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 919
    Points
    919
    Par défaut
    Bah justement , c'est ce que je pensait qu'il était possible de faire avec l'object EventSource introduite en HTML5. D'après ce que j'ai compris, il s'agit de l’implémentation HTML 5 du projet COMET permettant de garder une connexion ouverte entre le serveur et le client sans long polling donc.

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Pour moi, le seul réel push serveur serait d'ouvrir un socket via une applet embarquée dans la page html, avec les restrictions que ça implique bien sûr.
    Le reste ressemble plus à des appels à intervalle régulier.

  8. #8
    Membre éprouvé Avatar de scandinave
    Homme Profil pro
    Développeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 919
    Points
    919
    Par défaut
    Alors d'après ce que j'ai compris. Au lieu de faire du long polling qui implique
    1. Une ouverture de connexion
    2. Un envoi d'entête HTTP
    3. Une fermeture de connexion

    et ce toute les secondes.

    On a avec le SSE( Server-Sent Event )
    1. Une ouverture de connexion
    2. Un envoi de d'entête HTTP simplifier dans le sens server navigateur uniquement
    3. Multiple Envoi de donnée
    4. Fermeture de connexion


    En gros on gagne en ressource et en bande passante vu que la connexion reste ouverte.

    Mais c'est une sorte de long polling ammélioré.
    J'ai réussi à maintenant la connexion. Fallait juste faire une boucle pour envoyer des données en continue.

    Voici le code coté servlet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    response.setContentType("text/event-stream");
    response.setCaractereEncoding("UTF-8");
    response.setHeader("Cache-control", "no-cache");
    printWriter output = response.getWriter();
    String data = "";
    while (true) {
        data += "data : Server time  " + new Date() + "\n\n";
        output.write(data);
        output.flush();
        try{
             Thread.sleep(5000);
        } catch (Exception e) {
              LOGGER.info("Erreur de thread");
        }
    }
    Après de la , a l'intégrer dans un projet et de detecter quand un utilisateur fait une action, ça va être plus cho.

Discussions similaires

  1. Réponses: 15
    Dernier message: 09/10/2011, 09h16
  2. [SQL Server 2000] comment faire ?
    Par LeNeutrino dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/12/2006, 22h36
  3. [C#] Comment faire un simple SELECT à SQL Server ?
    Par Rodie dans le forum Accès aux données
    Réponses: 15
    Dernier message: 30/10/2006, 18h04
  4. [Sql server 2005] Comment faire des taches planifiées?
    Par critok dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/05/2006, 12h19
  5. comment faire la connexion (SQLServer) avec server MSDE(LAN)
    Par BRAHIMI MOUSSA dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 12/01/2006, 13h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo