如何禁用Symfony内置服务器的output_buffering以实现SSE流?
Symfony内置服务器下SSE流输出缓冲问题求助
我需要实现SSE流,在Symfony项目的public目录下创建了独立PHP文件,代码如下:
<?php header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); echo "data: 1\n\n"; flush(); sleep(1); echo "data: 2\n\n"; flush(); sleep(1); echo "data: 3\n\n"; flush(); sleep(1); echo "data: 4\n\n"; flush(); sleep(1);
直接执行php public/sse.php时,每秒输出一行,符合预期;但启动Symfony内置服务器(symfony server:start -d)后,用curl https://127.0.0.1:8000/sse.php请求,需等待4秒才一次性输出所有内容,推测是Symfony服务器仍在缓冲输出。
已尝试以下操作但均无效:
- 执行
php -i | grep output_buffering返回output_buffering => 0 => 0,确认PHP本身无输出缓冲 - curl添加
--insecure参数排除SSL问题,无效 - 在第一个echo前添加
ob_end_flush(),无效
补充测试结果:
- 执行
curl --no-buffer -H 'Accept: text/event-stream' https://127.0.0.1:8000/sse.php仍一次性输出所有内容 - 直接运行PHP文件无请求记录且无缓冲,输出正常
- 使用PHP内置服务器时,PHP和curl测试均正常,每秒输出一行
- 将输出改为
echo str_repeat('1', 4096) . "\n\n"; flush(); sleep(1);,依然被缓冲
目前无法定位问题原因,求解决思路。
内容的提问来源于stack exchange,提问作者Jack33
相关产品推荐
相关产品推荐

