События, отправленные сервером PHP Соединение не будет закрыто?

Я реализовал сервер отправил события с EventSource в моем веб-приложении.
В основном в JavaScript мой код выглядит так:

    var myEventSource;
if (typeof(EventSource) !== "undefined" && !myJsIssetFunction(viridem.serverSideEvent.config.reindexProcessingEvent)) {
myEventSource = new EventSource('/my/url/path.php?event=myevent');
EventSource.onmessage = function(e) {
[...] //Dealing with e.data that i received ...
}
}

на стороне PHP у меня есть что-то вроде этого:

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header("Access-Control-Allow-Origin: *");

//this or set_the_limit don't work but whatever I can deal without it
ini_set('max_execution_time', 300);
//ignore_user_abort(true); tried with true and false

bool $mustQuit = false;

while (!$mustQuit && connection_status() == CONNECTION_NORMAL) {
if(connection_aborted()){
exit();
}
[...] //doing some checkup

if ($hasChange) {
//Output stuffs
echo 'data:';
echo json_encode($result);
echo "\n\n";
ob_flush();
flush();
sleep(5);
}

}

из ответа, найденного по адресу: PHP Event Source продолжает выполняться , заголовки «text / event-stream» должны автоматически закрывать соединение, но в моем случае этого не происходит ..

Я добавил eventsource.close в событие window.onbeforeunload, но оно не закрыло событие.

window.onbeforeunload =  function() {
myEventSource.close();
myEventSource = null;
};

Если я просматриваю сетевой раздел моего браузера, я вижу заголовки (после добавления максимального цикла 30):
Тип контента: текст / поток событий; кодировка = UTF-8

Заголовки ответа:

Access-Control-Allow-Origin: *

Cache-Control: без кеша

Подключение: Keep-Alive

Тип контента: текст / поток событий; кодировка = UTF-8

Сервер: Apache / 2.4.18 (Ubuntu)

Дата: четверг, 26 апреля 2018 года, 20:29:46 по Гринвичу

Истекает: четверг, 19 ноября 1981 года, 08:52:00 по Гринвичу

Заголовки запроса:

Подключение: keep-alive

Принять: текст / событие

Cache-Control: без кеша

Примечание: я подтверждаю, что скрипт все еще работает с журналами и проверяя процесс apache2 с помощью bash (ps -ax | grep -c apache2), который всегда увеличивается.

1

Решение

Благодаря помощи @LawrenceCherone я узнал, что вам нужно «вывести данные» для работы connection_aborted …

В моем случае я выводил данные только тогда, когда мне нужно было …

добавляя

   if ($hasChange) {
//Output stuffs
echo 'data:';
echo json_encode($result);
echo "\n\n";
ob_flush();
flush();
sleep(5);

} else {
echo 'data:';
echo "\n\n";
ob_flush();
flush();
if(connection_aborted()){
exit();
}
}

connection_aborted начал работать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]