You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP实现Server-Sent Events(SSE)即时推送事件?

PHP实现Server-Sent Events(SSE)无法即时触发事件的问题

我尝试用PHP实现Server-Sent Events(SSE),但浏览器无法即时触发事件。

我的代码:

<?php
    
    // Headers must be processed line by line.
    header('Content-Type: text/event-stream');
    header('Cache-Control: no-cache');
    header('X-Accel-Buffering: no');
    while(true)
    {
    
        // Set data line
        echo "event: server-time";
        echo "data: " . date( 'G:H:s', time() );
        //echo str_repeat(" ", 4096);
    
        ob_end_flush();     // Strange behaviour, will not work
        flush();            // Unless both are called !
    
        // Wait one second.
        sleep(1);

}

代码可运行,但存在缓冲区最小大小限制,需达到该大小才会向浏览器刷新发送数据。取消注释str_repeat行后,事件几乎每秒即时推送;若保留注释,浏览器会持续加载约2分钟后才发送累计数据。

我已在Stack Overflow查找方案,但未找到通用解决办法。

PHPINFO相关信息:

名称值
Server APIFPM/FastCGI
PHP Version7.4.30
BZip2 SupportEnabled
Registered PHP Streamshttps, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, ssh2.shell, ssh2.exec, ssh2.tunnel, ssh2.scp, ssh2.sftp, zip
Registered Stream Socket Transportstcp, udp, unix, udg, ssl, tls, tlsv1.0, tlsv1.1, tlsv1.2, tlsv1.3
Registered Stream Filterszlib., bzip2., convert.iconv., string.rot13, string.toupper, string.tolower, string.strip_tags, convert., consumed, dechunk, mcrypt., mdecrypt., http.*
Stream Wrapper supportcompress.bzip2://
Stream Filter supportbzip2.decompress, bzip2.compress
BZip2 Version1.0.6, 6-Sept-2010
output_bufferingno value
output_encodingno value
output_handlerno value
zlib.output_compressionOff
zlib.output_compression_level-1
zlib.output_handlerno value

内容的提问来源于stack exchange,提问作者Gugu72

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 11:06:19