Я пытаюсь справиться с событиями на стороне сервера, так как они соответствуют моим требованиям и кажутся, что они должны быть простыми в реализации, однако я не могу пройти мимо неопределенной ошибки и то, что похоже на то, что соединение неоднократно закрыт и вновь открыт. Все, что я пробовал, основано на этом и других учебниках.
PHP - это единственный script:
<?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 выглядит следующим образом: (run on body 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 script из CLI, чтобы дать толчок уже подключенному браузеру?)
Если я запустил этот JS в Chrome (16.0.912.77), он откроет соединение, получит время, затем ошибки (без полезной информации в объекте ошибки), затем повторно подключается через 3 секунды и проходит один и тот же процесс. В Firefox (10.0) я получаю такое же поведение.
РЕДАКТИРОВАТЬ 1. Я думал, что проблема может быть связана с сервером, который я использовал, поэтому я протестировал на установке Vanilla 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 очень просто. Также были бы полезны любые ответы на мои два пронумерованных вопроса.
Спасибо.