+
96
-

回答

SSE(server-sent event)是基于HTML5的服务器推送消息事件,它允许服务端单向向浏览器客户端发送数据,SSE使用流信息向浏览器推送信息,浏览器自动接收服务端推送过来的消息,它是基于HTTP协议。

前端html代码

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum=1.0,minimum=1.0,user-scalable=0" />
<title>BFW NEW PAGE</title>

<script type="text/javascript">
if(typeof(EventSource) !== "undefined") {

var source = new EventSource("sse.php");
//监听test事件
source.addEventListener('test', function (event) {

console.log(event.data)

});

} else {

alert("您的浏览器不支持SSE");

}
</script>
<style>
</style>
</head>

<body>

</body>

</html>

服务端sse.php代码

<?php

header('X-Accel-Buffering: no');

header('Content-Type: text/event-stream');

header('Cache-Control: no-cache');

set_time_limit(0); //防止超时

ob_end_clean(); //清空(擦除)缓冲区并关闭输出缓冲

ob_implicit_flush(1); //这个函数强制每当有输出的时候,即刻把输出发送到浏览器。这样就不需要每次输出(echo)后,都用flush()来发送到浏览器了
$j = 0;

while ($j < 5) {//推送5次
sleep(2);//休眠2秒钟
$j++;
$c = "event:test" . PHP_EOL; //定义事件
$c .= "data:helloword" . PHP_EOL; //推送内容
echo $c . PHP_EOL;
}

//没消息时也得有个输出 不能会报错
echo 1;

网友回复

我知道答案,我要回答