<?php
if($_GET["t"]=="y"){
header('Content-Type: text/event-stream');
header('X-Accel-Buffering: no');
//header('Cache-Control: no-cache');
//header('Connection: keep-alive');
$counter= 0;
while($counter<8) {
//echo "retry: 1000\n"; // 设置重试时间为1秒
//echo "id: {$counter}\n"; // 设置事件ID
//echo "event: custom-event\n"; // 设置事件类型为自定义事件
echo "data: " . $counter++ . "\n\n";
ob_flush();
flush();
sleep(1);
}
exit();
}
?><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SSE流通讯示例</title>
</head>
<body>
<h1 id="message"></h1>
<script>
const message = document.getElementById('message');
const source = new EventSource('?t=y');
source.onopen = function() {
message.innerHTML = "kaishi...<br>";
};
source.onmessage = function(event) {
message.innerHTML += event.data + "<br>";
};
source.onerror = function() {
source.close();
message.innerHTML += "stop...<br>";
};
</script>
</body>
</html>
响应头中设置的Content-Type和Cache-Control是必须的,它们告诉浏览器这是一个SSE服务,以及不要缓存响应的内容。