サーバーサイドイベントは私の要件に完全に適合し、実装が簡単であるように思われるため、理解しようとしていますが、あいまいなエラーを乗り越えることができず、接続が繰り返し閉じられて再接続されているように見えます-開いた。私が試したことはすべて、このチュートリアルと他のチュートリアルに基づいています。
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 は次のようになります (ボディ ロードで実行)。
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 に特別な設定が必要な場合、および
- この種のセットアップでサーバーからプッシュを開始するにはどうすればよいですか (たとえば、CLI から PHP スクリプトを実行して、既に接続されているブラウザーにプッシュすることはできますか?)
この JS を Chrome (16.0.912.77) で実行すると、接続が開かれ、時間が受信され、エラーが発生し (エラー オブジェクトに有用な情報はありません)、3 秒で再接続され、同じプロセスが実行されます。Firefox (10.0) でも同じ動作をします。
EDIT 1:問題は使用しているサーバーに関連している可能性があると考えたので、バニラのXAMPPインストールでテストしたところ、同じエラーが発生しました。基本的なサーバー構成は、変更/追加構成なしでこれを処理できる必要がありますか?
編集 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 が非常に単純であるように見えます。また、上記の 2 つの番号付きの質問に対する回答は、非常に役立ちます。
ありがとう。