Работаю с библиотекой EventSource.
Нужно обновлять данные на странице в релтайме.
Клиент:
<script type="text/javascript">
var es = new EventSource("/games/game/updateProposal/?id=<?=$proposal->proposal_id?>");
var open = function (event)
{
console.log('Открытие');
};
var listener = function (event)
{
console.log('OK');
//event.data = JSON.parse(event.data);
console.log(event.data);
};
var error = function (event)
{
console.log('Ошибка');
};
es.addEventListener("open", open);
es.addEventListener("message", listener);
es.addEventListener("error", error);
</script>
Сервер:
{
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); // recommended to prevent caching of event data.
$lastEventId = floatval(isset($_SERVER["HTTP_LAST_EVENT_ID"]) ? $_SERVER["HTTP_LAST_EVENT_ID"] : 0);
if ($lastEventId == 0)
{
$lastEventId = (isset($_GET["key"])) ? (string)$_GET["key"] : 0;
}
$w = array(
array('test1'=>1),
array('test2'=>2),
array('test3'=>3),
);
$data = ProcessingData::load()->getJson($w);
echo "id: {$lastEventId}" . PHP_EOL;
echo "data: $data" . PHP_EOL;
echo PHP_EOL;
sleep(5);
ob_flush();
flush();
}
Возникло несколько вопросов:
1) Сервер отвечает 3 строками
1) id последнего эвента
2) данные
3) пустая строка
Пытался убрать пустую строку (echo PHP_EOL;) и в listener больше не попадаем.
Для чего эта пустая строка и почему ее нельзя убрать?
2) Если убрать (echo PHP_EOL;) мы попадаем в событие старта и ошибки, если все хорошо попадаем во все 3 события. Почему в любом случае мы попадаем в событие ошибки ?