Я реализую некоторый код для запроса базы данных для любых изменений и отправки события. Здесь код моего PHP скрипт
header("Content-Type: text/event-stream");
header('Cache-Control: no-cache');
//****Some code here to query the database
echo "event: message\n";
echo "data: change_from_database \n";
echo "\n\n";
ob_flush();
flush();
Я полагаюсь на браузер, чтобы автоматически подключаться каждый раз, когда соединение закрывается, поэтому я не реализую какой-либо цикл на моем сервере. Кроме того, я узнал из этой темы, что реализация бесконечного цикла имеет много недостатков.
Итак, все работает отлично на стороне клиента: браузер восстанавливается каждый раз, когда соединение закрывается, и событие запускается каждый раз, когда сервер отправляет его; хорошо, за исключением Firefox (40.0.2), который не пересоединяется. Я знаю, что это не потому, что я написал код проверки ошибок JavaScript, чтобы проверить это:
var evtSource = new EventSource("../sse.php");
evtSource.onerror = function(event){
var txt;
switch( event.target.readyState ){
case EventSource.CONNECTING:
txt = 'Reconnecting...';
break;
}
console.log(txt);
}
Итак, как и каждую секунду, консоль на хроме, например, регистрирует "Reconnecting"
. Firefox, с другой стороны, снова соединяется и никогда не делает этого снова.
Как написать код, чтобы сделать эту работу в Firefox и, возможно, в других браузерах, которые поддерживают события, отправленные сервером, но не подключаются автоматически?