我使用Ubuntu 17.04,Apache 2.4,proxy_fcgi和php-fpm。除了刷新服务器发送事件外,一切正常并且连接良好。
Flushing曾经与mod_fastcgi和fastcgiexternalserver很好地配合使用“-flush”。现在使用Ubuntu 17.04,它不包含mod_fastcgi,建议使用proxy_fcgi。
使用proxy_fcgi我已禁用gzip,输出缓冲,使用“Content-Encoding:none”,connection_aborted和flush工作的唯一真正方法是,如果你发送大约32K(我猜这是因为代理缓冲?)
它在Apache Docs中说你不能将ProxyReceiveBufferSize或ProxyIOBufferSize设置为小于512.
使用proxy_fcgi确实应该有一种更简单的方法。
发送服务器已发送事件数据的示例代码:
while (!connection_aborted() ) {
echo('data: {}' . PHP_EOL . PHP_EOL);
flush();
} // While //
编辑:我也尝试了ob_flush(),但我之前用ob_end_clean()禁用了输出缓冲(ob_ *),而ob_flush()将返回错误。
答案 0 :(得分:0)
尽管这个问题是几年前提出的,但我还是遇到了Apache 2.4和public static IMessageBus CreateBusAndRegisterQueueConsumer<T>(string servicePath, string queueName, IComponentContext autoFacContext)
where T : class
{
return new MessageBus
{
Instance = Bus.Factory.CreateUsingAzureServiceBus(
sbc =>
{
var host = ConfigureServiceBus(servicePath, sbc);
sbc.ReceiveEndpoint(host, queueName, ec =>
{
ec.Consumer<CommandConsumer<T>>(autoFacContext);
});
})
};
}
的类似问题。 PHP应用程序确实直接返回了数据而没有缓冲(已通过内部服务器mod_fcgid
测试)-但是在与Apache一起使用时已被缓冲。
以下配置为php -S 0.0.0.0:8080 index.php
禁用输出缓冲(默认大小为65536字节)
mod_fcgid
https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#FcgidOutputBufferSize