Пытаюсь реализовать SSE
на стеке Apache+PHP(FastCGI).
Apache 2.4.39, PHP 7.3.4, Firefox 66.0.2 (всё свежайшее на данный момент).
Проблема в том, что после ухода пользователя со страницы с установленным SSE
(переход на другую ссылку на сайте), в логе апача возникает каждый раз ошибка вызова 500-ой ошибки: AH00690: no acceptable variant: /usr/share/apache2/error/HTTP_INTERNAL_SERVER_ERROR.html.var
Даже при window.addEventListener('beforeunload',function(){sse.close();});
!
То есть SSE
не успевает корректно закрыться.
Код сервера (PHP
)
header('Content-Type: text/event-stream');
while($_SERVER['REQUEST_TIME'] >= time()-120)
{
echo 'data:',date('H:i:s',time()),"\n\n";
if(ob_get_contents())
ob_end_flush();
flush();
sleep(1);
}
die;
Код клиента (JS
)
<output id="time"></output>
<script>
<!--
'use strict';
function sseOpen()
{
console.log('SSE запущено!');
let sse = new EventSource('/ru/sse');
sse.onmessage = function(e)
{
document.getElementById('time').value=e.data;
};
window.addEventListener('beforeunload',function()
{
sse.close();
});
sse.onerror = function(e)
{
sse.close();
console.log('SSE закрыто!');
sseOpen();
};
}
sseOpen();
//-->
</script>
while($_SERVER['REQUEST_TIME'] >= time()-120)
Я использую чтобы ограничить время жизни скрипта, так без этого будут ещё больше ошибок говорящих о том, что время жизни скрипта истекло.
die
в конце ни на что не влияет, он на всякий случай.
Если не возобновлять соединение (за комментировать запуск при ошибке), и подождать несколько секунд после остановки времени и перейти на другую страницу - ошибки не происходит. Во всех других случаях при обновлении страницы или переходе на другую в лог апача записывается эта ошибка.
Каким образом мне корректно обработать переход пользователя на другую страницу, чтобы это не вызывало ошибки в логе?
Почему вызывается 500-ая ошибка на апаче и почему происходит ошибка вызова 500-ой ошибки на апаче?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Почему если я заполняю мэпом, то онклик не работает?Ниже он работает и переходит на следующий шаг
Необходимо обеспечить поддержку angular7 в ie9По найденным советам уже подключил всевозможные полифиллы
Вообщем надо чтобы давало всем параметры юзерам которые есть в определённом кланеНо у меня получается только для 1 юзера