Я работаю над проектом, использующим 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 от пользователей, в основном из-за того, что вы не можете иметь несколько вкладок с потоком событий с одного и того же URL-адреса, открытого в Chrome, но это новое открытие, вероятно, будет более серьезной проблемой. Хотя, если 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();