Javascript Ob_end_flush正在生成恒定错误

Javascript Ob_end_flush正在生成恒定错误,javascript,php,buffer,server-sent-events,Javascript,Php,Buffer,Server Sent Events,我目前正在处理服务器发送的事件,我遇到了一个奇怪的问题。随着事件的进行,在每次迭代中,我都会收到以下错误: ob_end_flush():未能删除和刷新缓冲区。没有要删除的缓冲区 还是冲进来 我的服务器事件服务器端代码如下: <?php require "connect.php"; session_write_close(); header("Content-Type: text/event-stream\n\n"); $savedcount = 0; whi

我目前正在处理服务器发送的事件,我遇到了一个奇怪的问题。随着事件的进行,在每次迭代中,我都会收到以下错误:

ob_end_flush():未能删除和刷新缓冲区。没有要删除的缓冲区 还是冲进来

我的服务器事件服务器端代码如下:

<?php

  require "connect.php";

  session_write_close();

  header("Content-Type: text/event-stream\n\n");

  $savedcount = 0; 
  while (1) {

    // Who's mechanism 
    $query = $mysqli->query("SOME QUERY"); 
    $rowcount = $query->num_rows;

    if ($savedcount != $rowcount) {
       // echo stuff
       $savedcount = $rowcount; // only echo stuff if there is new content
    }

    ob_end_flush();
    flush();
    sleep(2);
  }

?>

在PHP中,输出缓冲区保存将打印到页面上的实际内容——基本上是任何回显或打印的内容。因此,如果您根本不回显任何内容,则缓冲区将为空,并且当您尝试使用ob_end_flush发送任何内容时,将出现错误。您只需添加一个检查即可避免此错误:

if (ob_get_length() > 0) {
    ob_end_flush();
    flush();
}

sleep(2);

我一直用这个成语:

@ob_flush();@flush();
引用HTML5 SSE数据推送应用的第21页:(免责声明:我的书)

@据说速度很慢。但是把它放在上下文中,它增加了0.01ms的顺序来调用它两次,如下所示。 ... 建议flush()永远不会抛出错误,因此可以删除@on flush(),只需将其保留在@ob_flush()上即可


显示了
ob\u flush()
可以给出的两个E\u通知。

在发送缓冲区内容之前,必须使用启动一个。此外,对于while(1),此脚本将一直运行,直到服务器在最长执行时间停止它为止。这就是您想要的吗?是的,这就是服务器发送的事件正常工作所需的:启动缓冲区:
ob_start()