SSE fonctionne en local mais sur ovh ni sur IBM!!

Le problème exposé dans ce sujet a été résolu.

Bonjour, je déploie mon site ce jour sur un hébergement ovh.
j’ai tout testé en local tout est ok, sur ovh tout est KO.

en clair, j’ai une page planning qui doit afficher se mettre à jour au fur et a mesure que les clients prennent rendez-vous. concrètement, j’ai une entity rendez-vous et une entity SSE. l’entity SSE s’incrémente lorsque la prise du rendez-vous est aujourd’hui avec l’id du planning, l’id du rendez-vous et un état (null par défaut)

voici le code sur la page planning qui intérroge la méthode SSEAction

<script>
$(document).ready(function(){
    //server sent 
    if(typeof(EventSource) !== "undefined") {
        var source = new EventSource("{{ path('SSE', {'id': planning.id, 'date': date|date("d-m-Y") }) }}");
        source.addEventListener('message', function(e) {
            {# if (e.origin =="http://{{ app.request.server.get('SERVER_NAME') }}") { #}
                source.onmessage = function(event) {
                    if(event.data != "null"){
                        console.log(event.data);                        
                        
                        var audio = new Audio('{{ asset("son/msg.mp3") }}');
                        var promise = audio.play();
                        if (promise !== undefined) {
                            promise.then(_ => {
                                // Autoplay started!
                            }).catch(error => {
                                // Autoplay was prevented.
                                // Show a "Play" button so that user can start playback.
                            });
                        }
                        idrdv = event.data;
                        msg = "Nouveau rendez-vous positionné dans votre planning";

                        if (!("Notification" in window)) {
                            alert("Ce navigateur ne supporte pas les notifications desktop");
                        } else if (Notification.permission === "granted") {                           
                            var notification = new Notification(msg);
                        } else if (Notification.permission !== 'denied') {
                            Notification.requestPermission(function (permission) {
                            if(!('permission' in Notification)) {
                                Notification.permission = permission;
                                document.getElementById("snackbar-container").innerHTML = ' <div class="snackbar error fadeOut">Vous avez desactiver les notifications windows</div>';
                            }
                            if (permission === "granted") {
                                var notification = new Notification(msg);
                            }
                            });
                        }
                        {# document.getElementById("snackbar-container").innerHTML = ' <div class="snackbar notice fadeInUp"></div>'; #}
                        majRdv(idrdv);
                    }
                };
            {#  } #}
        });
    } else {
        document.getElementById("snackbar-container").innerHTML = ' <div class="snackbar error fadeOut">Désolé, votre browser n\'est pas supporté</div>';
    }
});

la méthode SSEAction

/**
     * server sent
     * @param integer [$id] identifiant du planning
     * @param date $date la date en francais 05-11-2018
     * @return 
     */
    public function SSEAction(Request $request, $id, $date){ 
        $session = $request->getSession();
        $em = $this->getDoctrine()->getManager();

        header('Content-Type: text/event-stream');
        header('Cache-Control: no-cache');
                
        $planning = $em->getRepository('AppBundle:Planning')->find($id);
        $rdvs = $em->getRepository('AppBundle:SSE')->findBy(array('planning'=>$planning, 'etat'=>null));

        if($rdvs){
            foreach($rdvs as $rdv){
                echo "data: {$rdv->getRendezvous()->getId()} \n\n";
                $rdv->setEtat(1);
            }
        }  else {
            echo "data:null\n\n";
        }
        flush();

        $em->flush();
        return new Response();
    }

dans la console j’ai bien mon retour comme quoi il n’y a pas de nouveaux rendez-vous mais lorsqu’un rendez-vous se positionne, la base de donnée ce met à jour (on met 1 à la place de null dans l’etat de la table SSE) mais la connexion SSE ne me renvoi pas le data.

+0 -0

Bon, j’ai changé d’hébergeur, pour passer sur ibm bluemix.

et la non plus, cela ne fonctionne pas, j’ai par contre un message un peu plus clair

EventSource’s response has a MIME type ("text/html") that is not "text/event-stream". Aborting the connection.

une idée?

j’ai trouvé!!

J’ai cru trouver :'( |

j’ai trouvé mais sans comprendre :'(

Je déclaré mal les headers

        $response = new Response();
        $response->headers->set('Content-Type', 'text/event-stream');
        $response->headers->set('Cache-Control', 'no-cache');

        return $response;

les headers bien déclaré, ca ne me renvoi plus rien…

bon je crois que je vais essayer de trouver autre chose et abandonner SSE…

Bon ben, le temps d’aller manger, sans rien toucher, ca fonctionne impec… j’hésite du coup a trouver une solution de remplacement, je me vois mal planter un service pour une techno capricieuse…

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte