Ответ 1
У вас, похоже, проблема с буферизацией вывода php. Попробуйте добавить эту строку в конец цикла while
:
ob_flush();
flush();
Это должно отключить буферизацию вывода.
EDIT Вы можете также завершить script через некоторое время (например, 10 минут), чтобы уменьшить нагрузку на сервер.
Я создал для вас библиотеку, чтобы сделать это очень легко. Проверьте здесь.
Второе редактирование У вас есть обратный прокси-сервер, такой как nginx или лак? Это может быть причиной, потому что прокси пытается кэшировать содержимое вывода, но SSE script никогда не заканчивается, пока вы не остановите его, чтобы все зависало. Другие вещи, которые захватывают вывод, могут иметь похожие результаты, такие как mod_deflate.
Третье редактирование Если у вас есть обратный прокси-сервер, вы можете попытаться отключить кеширование, чтобы SSE мог работать.
В PHP есть другие способы отключить буферизацию вывода. См. Код ниже:
<?php
for($i=0;$i<ob_get_level();$i++){
ob_end_flush();
}
@apache_setenv('no-gzip',1);
@ini_set('implict_flush',1);
ob_implict_flush(true);