Laravel 的 SSE 为什么没有成功呢?
我想用SSE代替socket.io实现论坛提醒效果。
这里做测试我把这个文件放在public文件夹里面
//demo.sse.php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$time = date('r');
echo "data: The server time is: {$time}\n\n";
flush();
前台js代码:
var source;
function init() {
source = new EventSource('http://blog.local/
demo_sse.php');
source.onopen = function () {
console.log("连接已经建立",this.readyState);
}
source.onmessage = function (event) {
ev = document.getElementById('result');
ev.innerHTML += "<br>[in] " + event.data;
console.log("成功",event.data)
}
source.onerror = function (event) {
console.log("失败",event);
}
}
init();
这样是可以打印出服务器的时间信息的,但是onerror还是会报错。
假如我是在路由里面写这样一段代码呢,就不行,状态是200,函数一直报错,不会打印出服务器时间。
而且我感觉这个flush()的地方好像不对,是不是要弄一个前置中间件?我发现当浏览器去访问这个的时候,有一段缓冲时间,好像是pending状态,而上面的那种就没有。
Route::get('/sse', function () {
$header = array(
'Content-Type' => 'text/event-stream',
'Cache-Control' => 'no-cache'
);
flush();
return response("data: Time".date(' H:i:s'), 200, $header);
});
推荐文章: