gpt4 book ai didi

php - 使用 PHP 和服务器发送事件(使用 proxy_fcgi 刷新)

转载 作者:可可西里 更新时间:2023-10-31 23:36:56 24 4
gpt4 key购买 nike

我使用 Ubuntu 17.04、Apache 2.4、proxy_fcgi 和 php-fpm。除了为服务器发送的事件刷新外,一切正常并且连接良好。

Flushing 过去常常与 mod_fastcgi 和带有“-flush”的 fastcgiexternalserver 一起很好地工作。现在使用 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() 将返回错误。

最佳答案

虽然这个问题几年前就有人提出过,但我只是遇到了 Apache 2.4 和 mod_fcgid 的类似问题。 PHP 应用程序没有缓冲直接返回数据(使用内部服务器 php -S 0.0.0.0:8080 index.php 测试) - 但在与 Apache 一起使用时它被缓冲了。

以下配置禁用 mod_fcgid 的输出缓冲(默认大小为 65536 字节)

FcgidOutputBufferSize 0

https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#FcgidOutputBufferSize

关于php - 使用 PHP 和服务器发送事件(使用 proxy_fcgi 刷新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44091554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com