我目前正在处理Server-Sent Events,我遇到了一个奇怪的问题。随着事件的继续,每次迭代我都会收到以下错误:
ob_end_flush():无法删除并刷新缓冲区。没有要删除的缓冲区 或冲洗
我的服务器事件服务器端代码如下:
var userName = prompt("Whats your name?") ;
var userBorn = prompt ("Hey " + userName + " What year where you born?") ;
var userAge = prompt ("hmm so if you were born " + userBorn + " that would make
you how old today?") ;
var newAge = function (yearsAlive) {
yearsAlive = this.yearBorn + this.age ;
if (yearsAlive === 2016) {
document.write("That Sounds about right to me ! ");
} else {
document.write("Your age cant be right , please try again");
}
} ;
var me = {
name: userName ,
yearBorn: userBorn,
age: userAge,
years: newAge
} ;
me.years() ;
我不完全理解缓冲区。此外,在您认为这是一个糟糕的做法之前,请知道Server-Sent Events是特殊的。这是他们在MDN上显示的类似脚本。出于这个原因,我不确定为什么我会不断收到这些错误。
建议?
答案 0 :(得分:2)
在PHP中,输出缓冲区保存将打印到页面的实际内容 - 基本上是回显或打印的任何内容。因此,如果您根本不回显任何内容,则缓冲区将为空,当您尝试使用ob_end_flush发送任何内容时,您将收到错误。您可以添加一个检查以避免此错误:
if (ob_get_length() > 0) {
ob_end_flush();
flush();
}
sleep(2);
答案 1 :(得分:1)
我一直用这个成语:
@ob_flush();@flush();
使用HTML5 SSE从数据推送应用程序的第21页引用:(免责声明:我的书)
据说@很慢。但是把它放在上下文中,它会增加0.01ms的数量来调用它,如图所示。 ... http://git.php.net/?p=php-src.git;a=blob;f=sapi/apache2handler/sapi_apache2.c#l290表示flush()永远不会抛出错误,因此可以删除@ flush()上的@,只需将其保留在@ob_flush()上。
http://git.php.net/?p=php-src.git;a=blob;f=main/output.c#l1328显示了ob_flush()
可以提供的两个E_NOTICE。