相关疑难解决方法(0)

EventSource(SSE)是否应该尝试无限期重新连接?

我正在开发一个利用Server-Sent-Events的项目,并且遇到了一些有趣的事情:Chrome和Firefox之间的连接丢失处理方式不同.

在Chrome 35或Opera 22上,如果您丢失了与服务器的连接,它将每隔几秒尝试无限期重新连接,直到成功为止.另一方面,在Firefox 30上,它只会尝试一次,然后您必须刷新页面或处理引发的错误事件并手动重新连接.

我更喜欢Chrome或Opera的方式,但是阅读http://www.w3.org/TR/2012/WD-eventsource-20120426/#processing-model,似乎一旦EventSource尝试重新连接并失败由于网络错误或其他原因,它不应重试连接.但不确定我是否正确理解规范.

我开始要求用户使用Firefox,主要是因为你不能在Chrome上打开同一个URL的事件流,但是这个新发现可能更多的是一个问题.虽然,如果Firefox的行为符合规范,那么我不妨以某种方式解决它.

编辑:

我现在要继续以Firefox为目标.这就是我处理重新连接的方式:

var es = null;
function initES() {
    if (es == null || es.readyState == 2) { // this is probably not necessary.
        es = new EventSource('/push');
        es.onerror = function(e) {
            if (es.readyState == 2) {
                setTimeout(initES, 5000);
            }
        };
        //all event listeners should go here.
    }
}
initES();
Run Code Online (Sandbox Code Playgroud)

javascript firefox google-chrome server-sent-events

21
推荐指数
4
解决办法
1万
查看次数