什么是触发SSE错误事件

时间:2015-08-29 18:40:03

标签: javascript java server-sent-events

我有一个服务于SSE数据的servlet

writer.write("data: Time is ");
writer.write(Calendar.getInstance().getTime().toString()+"\n\n");
System.out.println("Error state of the stream: " + writer.checkError()); //prints false
response.flushBuffer();

这是我的javascript代码:

var eventSource = null;

function start() {
    if (!!window.EventSource) {
        eventSource = new EventSource("SSESyncServlet");
    } else {
        // Result to xhr polling :(
    }

    eventSource.addEventListener('message', function(event) {
        document.getElementById('dataFromServer').innerHTML = event.data;
    });

    eventSource.addEventListener('open', function(e) {
        console.log("connection opened event");
    });

    eventSource.addEventListener('error', function(e) {
        console.log("connection error event");
    });
}

不确定是什么导致它,但我在消息事件后的javascript中收到了错误事件。

更新1:

根据以下评论的建议,我需要使用Async servlet,修改服务器端代码。

    final AsyncContext aCtx = request.startAsync();

    final PrintWriter writer = response.getWriter();
    System.out.println("Request Received");

    Runnable runnable = new Runnable() {
        @Override
        public void run() {

            writer.write("data: Time is \n");
            writer.write("data: "+Calendar.getInstance().getTime().toString()+"\n\n");
            System.out.println("Error state of the stream: " + writer.checkError());
            writer.flush();
            aCtx.dispatch();
        }
    };
    Thread t = new Thread(runnable);
    t.start();
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

但是现在甚至在我从客户端关闭连接之后。服务器端代码继续运行。

服务器保持打印

Request Received
Error state of the stream: true

无限期。

0 个答案:

没有答案