apache — серверные события в php отправляют все события сразу в конце

У меня есть этот код:

<?php

class Events {
function __construct($fn, $options=array()) {
$settings = array_merge(array(
'headers' => array(
'Content-Type' => 'text/event-stream',
'Cache-Control' => 'no-cache',
'Connection' => 'keep-alive'
),
'retry' => 2000
), $options);
foreach($settings['headers'] as $header => $value) {
header("$header: $value");
}
$lastId = intval(isset($_SERVER["HTTP_LAST_EVENT_ID"]) ? $_SERVER["HTTP_LAST_EVENT_ID"] : 0);
echo ":" . str_repeat(" ", 2048) . "\n";
echo "retry: " . $settings['retry'] . "\n";
$id = $lastId;
$i = 0;
foreach ($fn($id) as $value) {
echo "id:" . $id++ . "\n";
echo "data: " . $value . "\n\n";
ob_flush();
flush();
if ($i++ == 10) {
break;
}
}
}
}
if (isset($_SERVER['HTTP_ACCEPT']) && preg_match("%text/event-stream%", $_SERVER['HTTP_ACCEPT'])) {

new Events(function($id) {
while(true) {
$array = array("Foo", "Bar", "Baz", "Quux");
yield json_encode(array("message" => $array[array_rand($array)]));
sleep(1);
}
});
} else { ?><!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Leash</title>
<meta name="Description" content=""/>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script>
var source = new EventSource("/EventSource.php");
source.addEventListener("message", function(message) {
console.log(JSON.parse(message.data).message);
});
</script>
<body>
<textarea></textarea>
</body>
</html><?php } ?>

это работает локально на сервере wamp, но не на моем общем хостинге, у меня есть это в php info:

Server API          CGI/FastCGI

Directive           Local Value    Master Value
output_buffering    4096           4096

и я не могу изменить это, я пытаюсь добавить ob_start() к моему сценарию также ini_set('output_buffering', 0) и удаление ob_flush но это не помогло

Я также пытаюсь установить для output_buffering значение 0 в .user.ini для каталога, и информация о php показывает, что Local Value равен 0, но события на стороне сервера все еще не работают, я получаю все события сразу, и инструменты разработчика говорят (pending) с пустым типом до конца через 10 секунд.

Инструменты разработчика

Кто-нибудь знает, как это исправить?

-1

Решение

Я включил сжатие gzip с помощью apache. Ответ на этот вопрос решил проблему:

Отключить сжатие Gzip в файле .htaccess

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector