Javascript Ob_end_flush正在生成恒定错误
我目前正在处理服务器发送的事件,我遇到了一个奇怪的问题。随着事件的进行,在每次迭代中,我都会收到以下错误: 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
<?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()代码>