服务器发送的事件在localhost上有效,但在生产环境上不起作用

时间:2018-12-07 09:11:55

标签: jquery symfony event-stream

我今天将网站部署在ovh托管上。 在localhost上一切正常,但在ovh上是KO。

我有一个日程安排页面,客户预约时必须更新该页面。

具体来说,我使用的是symfony 3.4,并且我有一个实体集合点和一个实体SSE。 当今天的约会带有计划ID,约会ID和状态(默认为空)时,SSE实体会增加

这是时间表页面上查询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如果没有约会,但是在约会被定位后,返回ok,数据库将更新(我们在SSE表的状态中输入1而不是null),但是SSE连接不会向我发送数据。

提前向我们寻求帮助

0 个答案:

没有答案