Событие Server-Sent не работает. Браузеры не могут прослушивать события Server-Sent Event.

Я реализую отправленное сервером событие (HTML5) в своем проекте без использования node.js. Это просто вызов веб-страницы (другой JSP-страницы), и я получаю от него ответ. Но когда я получаю от него ответ, но ни один из методов/функций (onopen, onmessage или onerror) не выполняется...

Код клиента:

if (!!window.EventSource) {
            var source=new EventSource("kitAvailCall.jsp");
            source.onopen = function(){
                alert("Kit is not available");
                source.close();
            };
            source.onmessage=function(event){
                console.log(event.data);
                alert("Kit is not available");
            }
            source.onerror =function(){
                console.log("EventSOurce: Getting error call");
                alert("Kit is not available");
            }
        }

Серверный код:

try{
    while(true) {
        Thread.sleep(15000);
        String IpAddress = (String) session.getAttribute("IPName");
        boolean bool;
        if(IpAddress != null && ((new Date()).getTime() - session.getLastAccessedTime())/1000 > 28){
            bool = sample.pingToKit((String) session.getAttribute("IPName"));
            System.out.println("Long polling request: "+bool);
            //if bool is false then i want to quit loop and back to browser
            if(bool == false){
                response.setHeader("Content-Type","text/event-stream");
            response.setHeader("Cache-Control", "no-cache");
                out.print("data: " + bool);
                out.flush();
                break;
            }
        }
    }
}catch(Exception e){
    System.out.println("Going bad CONN:"+ e);
}

person Rickyrock    schedule 28.11.2013    source источник


Ответы (1)


Я не очень разбираюсь в java, но могу предположить, что вы, возможно, слушаете тот же сервлет контроллера/jsp (независимо от маршрутов данных в java), который вы сделали для отправки в виде потоковой передачи. Слушайте на странице, отличной от kitavailcall.jsp. Этот сценарий предназначен только для потоковой передачи, используйте другую страницу просмотра/html, отличную от kitavailcall.jsp. Вы должны понимать, что SSE — это параллельный процесс, вы создаете другую страницу и запускаете ее с включенным javascript (клиентским кодом). на этой странице. И ваш сервер также должен поддерживать многопоточность.

person Surendra Bobba    schedule 28.11.2013
comment
мой клиентский код находится на index.jsp. и я слушаю kitavailcall.jsp. - person Rickyrock; 29.11.2013