我使用Ubuntu 17.04、Apache 2.4、proxy_fcgi和php-fpm。除Server Sent Events的刷新外,其他一切工作正常并且连接良好。
使用mod_fastcgi和fastcgiexternalserver与“-flush”时,刷新可以正常工作。然而,在Ubuntu 17.04中,不包括mod_fastcgi,并且推荐使用proxy_fcgi。
使用proxy_fcgi时,我已禁用gzip、输出缓冲,使用“Content-Encoding: none”,唯一使connection_aborted和flush正常工作的方法是发送大约32K的数据(我猜这是因为代理缓冲?)。
在Apache文档中指出,不能将ProxyReceiveBufferSize或ProxyIOBufferSize设置小于512。
使用proxy_fcgi应该有更简单的方法来实现这一点。
以下是发送Server Sent Events数据的示例代码:
使用mod_fastcgi和fastcgiexternalserver与“-flush”时,刷新可以正常工作。然而,在Ubuntu 17.04中,不包括mod_fastcgi,并且推荐使用proxy_fcgi。
使用proxy_fcgi时,我已禁用gzip、输出缓冲,使用“Content-Encoding: none”,唯一使connection_aborted和flush正常工作的方法是发送大约32K的数据(我猜这是因为代理缓冲?)。
在Apache文档中指出,不能将ProxyReceiveBufferSize或ProxyIOBufferSize设置小于512。
使用proxy_fcgi应该有更简单的方法来实现这一点。
以下是发送Server Sent Events数据的示例代码:
while (!connection_aborted() ) {
echo('data: {}' . PHP_EOL . PHP_EOL);
flush();
} // While //
编辑:我也尝试了ob_flush(),但是之前我使用了ob_end_clean()禁用了输出缓冲(ob_*),所以ob_flush()会返回一个错误。
flush()
处使用ob_flush(); flush();
? - Darren Cookfastcgi_finish_request()
。 - David