如何解决生产 Laravel 8 上的“ob_flush():无法刷新缓冲区没有要刷新的缓冲区”
我正在 Laravel 中处理服务器发送事件。我在生产中遇到错误“ob_flush():无法刷新缓冲区。没有缓冲区可以刷新”它在本地主机上工作正常,但在生产中抛出错误
这里是sse代码
public function notificationsCount(Request $request)
{
try {
$response = new \Symfony\Component\HttpFoundation\StreamedResponse(function () use ($request) {
while (true) {
$notif_count = Auth::user()->unreadNotifications->count();
echo json_encode(['data' => $notif_count]) . "\n\n";
ob_flush();
flush();
sleep(1);
if (connection_aborted()) {
break;
}
}
ob_end_flush();
});
$response->headers->set('Content-Type','text/event-stream');
$response->headers->set('X-Accel-Buffering','no');
$response->headers->set('Cach-Control','no-cache');
return $response->send();
} catch (\Exception$e) {
return response()->json(['error' => $e->getMessage()]);
}
}
解决方法
如果输出缓冲区处于活动状态(例如通过 ob_flush()
或通过 php.ini 设置),您只需要 ob_start()
试试
ob_start();
echo "foo";
ob_flush();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。