Я пытаюсь разобраться с серверными событиями, так как они идеально соответствуют моим требованиям и кажутся простыми в реализации, однако я не могу обойти смутную ошибку и то, что соединение постоянно повторяетсязакрыто и вновь открыто.Все, что я пробовал, основано на этом и других руководствах.
PHP представляет собой один скрипт:
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
function sendMsg($id, $msg) {
echo "id: $id" . PHP_EOL;
echo "data: $msg" . PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
}
$serverTime = time();
sendMsg($serverTime, 'server time: ' . date("h:i:s", time()));
?>
и JavaScript выглядит следующим образом (выполняется на телеload):
function init() {
var source;
if (!!window.EventSource) {
source = new EventSource('events.php');
source.addEventListener('message', function(e) {
document.getElementById('output').innerHTML += e.data + '<br />';
}, false);
source.addEventListener('open', function(e) {
document.getElementById('output').innerHTML += 'connection opened<br />';
}, false);
source.addEventListener('error', function(e) {
document.getElementById('output').innerHTML += 'error<br />';
}, false);
}
else {
alert("Browser doesn't support Server-Sent Events");
}
}
Я немного обыскал, но не могу найти информацию о
- Если Apache требуется какая-либо специальная конфигурация для поддержки событий, отправляемых сервером, и
- Как я могу инициировать push-запрос с сервера при такой настройке (например, могу ли я просто выполнить скрипт PHP из CLI, чтобы выдать push-запрос уже подключенному браузеру?)
Если я запускаю этот JS в Chrome (16.0.912.77), он открывает соединение, получает время, затем ошибки (без полезной информации в объекте ошибок), затем повторно соединяется через 3 секунды и проходит тот же процесс.В Firefox (10.0) я получаю такое же поведение.
EDIT 1 : я думал, что проблема может быть связана с сервером, который я использовал, поэтому я протестировал на установке vanamp XAMPP ита же ошибка появляется.Может ли базовая конфигурация сервера справиться с этим без изменения / дополнительной настройки?
EDIT 2 : Пример вывода из браузера приведен ниже:
connection opened
server time: 01:47:20
error
connection opened
server time: 01:47:23
error
connection opened
server time: 01:47:26
error
Может кто-нибудь сказать мне, где это идет не так?Учебники, которые я видел, делают его похожим на SSE очень простым.Также любые ответы на мои два пронумерованных вопроса выше были бы действительно полезны.
Спасибо.