Я работаю над проектом, использующим 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 ведет себя по спецификации, я мог бы как-то обойти его.
Edit:
Сейчас я собираюсь настроить таргетинг на 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();