我正在尝试将服务器发送的事件与laravel一起使用,但是输出出现问题。
我的控制器:
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header("Connection: keep-alive");
$time = date('r');
echo "data: The server time is: {$time}\n\n";
flush();
ob_end_flush();
sleep(5);
$time = date('r');
echo "data: The server time is: {$time}\n\n";
flush();
ob_end_flush();
还有我的js:
var source = new EventSource('edit/steps');
source.addEventListener('message', function (e) { ... }, false);
问题在于数据仅在末尾输出。我没有第一个输出,然后是5秒钟,几秒钟。 5秒后只有两个。
我尝试使用“ ob_flush”代替“ ob_end_flush”,但是它不起作用。
有人看到问题出在哪里吗?
感谢您的帮助。
编辑:
此代码有效:
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header("Connection: keep-alive");
ob_implicit_flush(1);
for($i=0; $i<10; $i++){
echo $i;
//this is for the buffer achieve the minimum size in order to flush data
echo str_repeat(' ',1024*64);
sleep(1);
}
但是我只看到$ i。一旦我更改或向$ i添加内容,它就会停止工作。