【发布时间】:2014-07-03 22:11:19
【问题描述】:
我正在开发一个使用 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();
【问题讨论】:
标签: javascript google-chrome firefox server-sent-events