Отправленные сервером события работают на локальном хосте, но не работают на производстве - PullRequest
0 голосов
/ 07 декабря 2018

Сегодня я размещаю свой сайт на ovh хостинге.На localhost все нормально, но на ovh это KO.

У меня есть страница расписания, которая должна обновляться, когда клиенты назначают встречу.

Конкретно, я на Symfony 3.4, и у меня естьобъект рандеву и субъект SSE.сущность SSE увеличивается, если сегодня назначена встреча с идентификатором расписания, идентификатором встречи и состоянием (по умолчанию null)

вот код на странице расписания, который запрашивает метод SSEAction

$(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>';
    }
});

Метод 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();
    }

console.log возвращает нормально, если нет встречи, но при назначении встречи база данных обновляется (мы помещаем 1 вместо нуля в состояние таблицы SSE)но соединение SSE не отправляет мне данные.

спасибо за помощь

...