当前位置:首页 > 技术文章 > 正文内容

解决php因为输出内容太短无法流式(Stream)输出问题

arlanguage5个月前 (12-11)技术文章32

实测得知,如果用PHP做流式输出每次echo的内容太短的话,就没有流式的效果了,而是会等输出的长度达到一定时前端才能拿到结果,如下:


这是我这边的测试结果,可见,这里仅接收到了两次流式输出,但是我在PHP里是输出了10次,从而证明了每次流式的内容达到一定长度时才能有流式得到效果,这个长度到底是多少,我没有细致去测试了,我的想法是:判断下输出的内容的长度,如果不够1024,则拼接一些内容,再在前端剔除这些拼接的内容即可,这样前端就无损后端的操作了。

完整PHP代码如下,不需要更改nginx或者php.ini的配置:

function actionStreamOut()

{

$flag = "[[++--~!@#$%^&*()--++]]";

// 设置脚本超时时间,以防止脚本被服务器过早终止

set_time_limit(0);

// 禁用输出缓冲

while (ob_get_level()) {

ob_end_flush();

}

ob_implicit_flush(true);

header('Content-Type: text/event-stream'); // 必须要加

$data = json_encode([

'data' => '测试短文本'

], JSON_UNESCAPED_UNICODE); // 长度太短无法流式

// 填充数据长度不够1024的情况

while (strlen($data) < 1024) {

$data .= $flag; // ai生成的内容总不会有这种内容吧?前端拿到后再多次剔除即可还原真 正的消息了

}

for ($i = 1; $i <= 10; $i++) {

echo $i . "{$data}\n";

// 强制刷新输出缓冲区

flush();

// 模拟延迟,便于观察输出效果

usleep(200000);

}

}

前段接收到消息后,再全量剔除一下flag内容,代码如下:

var pattern = /\[\[\+\+--~!@#\$%\^&\*\(\)--\+\+\]]/g; // 匹配特定字符串的正则表达式

var result = str.replace(pattern, ''); // 删除所有匹配到的特定字符串

console.log(result);

实验一下:

没问题!

这篇分享文章就到这里啦!如果你对文章内容有疑问或想要深入讨论,欢迎在评论区留言,我会尽力回答。同时,如果你觉得这篇文章对你有帮助,不妨点个赞并分享给其他同学,让更多人受益。

想要了解更多相关知识,可以查看我以往的文章,其中有许多精彩内容。记得关注我,获取及时更新,我们可以一起学习、讨论技术,共同进步。

感谢你的阅读与支持,期待在未来的文章中与你再次相遇!

我的微信公众号:【xdub】,欢迎大家订阅,我会同步文章到公众号上。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/93.html

标签: php支持nginx
分享给朋友:

“解决php因为输出内容太短无法流式(Stream)输出问题” 的相关文章

nginx 初学者指引

本文会简单介绍 nginx 并演示相关的简单任务。首先你需要安装好 nginx。nginx 拥有一个主进程和几个 worker 进程。主进程的主要工作是读取和处理配置,维护 worker 进程。worker 进程负责处理实际的用户请求。nginx 采用 event-based 模型和 OS-depe...

一文说清nginx规则匹配(含案例分析)

概述: 在nginx中,匹配分很多情形,例如:区分大小写匹配、不区分大小写匹配、有强匹配开头、有模糊匹配某些字符、有匹配后重写动作、有匹配反向代理动作、有匹配后终止操作、还有匹配全局变量类型等等,在很多情形中,匹配动作也存在优先策略,来看看下面的案例。案例一、 server { .............

Linux下如何用nginx+ffmpeg搭建流媒体服务器

安装ffmpeg安装过程略安装完成后,检查是否安装成功。比如我这里采用向pili推流的方式,将本地的一个mp4视频推流到七牛pili。ffmpeg -re -i /tmp/ffmpeg_test.mp4 -vcodec copy -acodec copy -f flv "rtmp://pil...

轻松搭建基于 Serverless 的 ThinkPHP 应用

ThinkPHP 是什么?ThinkPHP 是一个免费开源的,快速、简单的面向对象的轻量级 PHP 开发框架,是为了敏捷 WEB 应用开发和简化企业应用开发而诞生的。ThinkPHP 从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的同时,更注重易用性。遵循 Apache2 开源许可...

windows 搭建php运行环境(2024年)

由于需要运行一套cms系统,需要运行php环境,现在开始记录搭建步骤:1、分别下载nginx和php包,然后解压到自己喜欢目录下面2、这里我们使用nginx的反向代理模式的FastCGI server,修改nginx.conf,然后启动或重启nginx。location ~ \.php$ {...

Nginx负载均衡安全配置说明2 nginx负载均衡配置文件

上一节,我们对Nginx安全配置的几个知识点做了一个说明,例如限制IP访问、文件目录禁止访问限制、需要防止DOS攻击、请求方法的限制和限制文件上传的大小这个进行了一个分析说明,详细的文章请关注我的头条号:一点热,在里面看回之前的文章,快速入口Nginx负载均衡的一些安全配置说明其实,配置Nginx的...