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

JavaScript Discussion :

Push avec EventSource [API HTML5]


Sujet :

JavaScript

  1. #1
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 717
    Points
    1 717
    Par défaut Push avec EventSource
    Bonjour,

    Je suis en train de découvrir les Server-Sent Events (SSE) pour faire du push. Or je n'arrive pas à obtenir un simple affichage d'un message.

    Mon code JS :
    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
     
    var sse = new EventSource('12_eventsource.php');
     
    sse.addEventListener('message', function(event) {
        console.log(event.data);
    }, false);
     
    // J'ai aussi essayé avec :
    sse.onmessage = function(event) {
        console.log(event.data);
    }
     
    sse.addEventListener('open', function(event) {
        console.log('Connection is opened');
    }, false);
     
    sse.addEventListener('error', function(event) {
        if (event.readyState == EventSource.CLOSED) {
            console.log('Connection was closed');
        }
    }, false);
    Mon code php (encodé en UTF-8) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    header('Content-Type: text/event-stream');
    header('Cache-Control: no-cache');
    echo 'data : ' . time() . PHP_EOL;

    J'ai bien le log de l'event open, mais pas les autres.
    J'ai testé sous Firefox et Chromium, d'après Caniuse et MDN ces deux navigateurs supportent bien le SSE.

    Voyez-vous ce qui cloche dans ce code ?

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Hello

    Bonne idée les Server Sent Events, c'est moins populaire que les WebSockets et pourtant très utile.

    Est-ce que tu vois tes requêtes arriver via l'inspecteur de développement ? Je ne me souviens plus exactement où ça se trouve, mais avec les Webkit Developer Tools je me rappelle qu'on pouvait voir arriver les push de data en temps réel, ce qui était pratique pour déboguer.

    Sinon le problème provient peut-être de l'implémentation côté serveur. Tu places bien ce code PHP dans une boucle infinie ? Il faut garder le canal ouvert.

    regarde le code PHP d'exemple sur https://developer.mozilla.org/en-US/...er-sent_events
    One Web to rule them all

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Points : 545
    Points
    545
    Par défaut
    Salut

    Il faut respecter scrupuleusement le format du flux SSE !
    Tu as oublié les 2 "LineFeed" (0x0A) et tu as un espace en trop entre data et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function (request, response)
    {
        response.writeHead(200,{ "Content-Type":"text/event-stream"});
        setTimeout(function()
        {
            response.write('data: ' + (new Date()).toString() +'\n\n');
        },2000)
    }
    ShaderElement : Bénéficier de l’accélération graphique simplement par une nouvelle balise HTML <shader>
    ODE.js : portage JavaScript du célèbre moteur physique 3D Open Dynamics Engine

  4. #4
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 717
    Points
    1 717
    Par défaut
    Merci pour vos réponses.

    @SylvainPV : pourquoi faut-il une boucle ? J'ai repris le code d'un bouquin, il ne parle pas de boucle, mais indique ceci :

    C'est bien le navigateur qui initie la connexion, et qui reste à l'écoute du serveur.

    J'en comprends que c'est mon code JS qui est "bouclé". D'ailleurs dans mes logs dans la console, j'ai bien un appel toutes les 3 secondes environ, sans avoir défini de boucle.

    @p3ga5e : je ne comprends pas ta remarque. le "data :" est une chaîne que je renvoie, que je mette "data" ou "plop" ne change rien, c'est une string à interprêter telle quelle, il n'y a pas de convention là dessus. Et s'il y en a une, elle est grammaticale, en français on met bien un espace avant un double-point.
    Concernant les line-feed je mets bien un PHP_EOL à la fin de mon retour.

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 717
    Points
    1 717
    Par défaut

  7. #7
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    pegase a raison, il y a un format à respecter scrupuleusement pour les SSE. Il est documenté ici : https://developer.mozilla.org/en-US/..._stream_format

    Je ne sais pas si une boucle infinie est nécessaire en PHP, j'utilisais Node.js personnellement. Il faudrait vérifier que PHP ne ferme pas la connexion une fois la première réponse envoyée.
    One Web to rule them all

  8. #8
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 717
    Points
    1 717
    Par défaut

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Notification Push avec GCM
    Par cruoor dans le forum Android
    Réponses: 1
    Dernier message: 07/07/2013, 23h56
  2. Notification (push ?) avec RichFaces
    Par Pignoufy dans le forum JSF
    Réponses: 7
    Dernier message: 16/02/2012, 19h45
  3. Notification Push avec wp7
    Par moezBH dans le forum Windows Phone
    Réponses: 9
    Dernier message: 01/05/2011, 21h15
  4. ajax push avec wicket
    Par cisco dans le forum Wicket
    Réponses: 1
    Dernier message: 26/05/2010, 23h04
  5. probleme avec la fonction push
    Par visteur dans le forum Langage
    Réponses: 7
    Dernier message: 17/03/2006, 10h03

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