前端了解下后端,学了些 php,如下代码:
<?php
echo "钱钱钱钱";
sleep(10);
echo '啊啊啊啊啊';
?>
它不是先输出钱,而是延迟 10 秒后,钱和啊一起输出。
py 它就是先输出钱,延时后再输出啊
所以各位巨大有什么解决办法吗
1
hahasong 2019-11-24 11:23:43 +08:00 via iPhone
前端你不了解 http 吗,想实现你的要求得在命令行下执行
|
2
815979670 2019-11-24 11:24:53 +08:00 via Android
cli 模式不是这样的
|
3
also24 2019-11-24 11:28:08 +08:00
缓冲区的原因,强制 flush 可解
|
4
optional 2019-11-24 11:35:05 +08:00 via iPhone
可以 flush 的
|
5
dobelee 2019-11-24 12:23:51 +08:00 via iPhone
请先学习一下 http。。。
|
6
nvkou 2019-11-24 12:28:03 +08:00 via Android
楼上说明了。php-cli 也是有的,之前试过用来做 ws 服务器
|
7
otakustay 2019-11-24 14:02:13 +08:00
不是,这和 HTTP 啥关系,HTTP 哪里规定了要一起输出的,楼上几位让楼主学 HTTP 的是几个意思,学歪吗?
|
8
worldtongfb 2019-11-24 14:30:22 +08:00
http 还能一次请求,给俩响应?你请求一次,还能先返回'钱钱钱钱',然后等 10 秒,再返回'啊啊啊啊啊'?
|
9
Trim21 2019-11-24 14:36:59 +08:00 via Android
这跟 http 有啥关系,http 里面一个请求也可以先返回一部分,再等十秒再返回另一部分啊,不关闭链接 body 分两次写不就行了吗。
php 能不能做到是另一回事,可 http 又不管你服务器是边渲染边返回还是渲染完了才开始响应。 |
10
lysS OP |
11
lysS OP 这跟 HTTP 好像确实没关系,因为是这跟 HTTP 好像确实没关系,因为是一次请求
|
12
dorentus 2019-11-24 17:34:05 +08:00 via iPhone
@worldtongfb 当然可以的
|
13
CEBBCAT 2019-11-24 19:06:29 +08:00 via Android
设置响应头为流模式应该可解
|
14
python 2019-11-24 19:22:23 +08:00 via Android
想一下下载文件,就知跟 HTTP 没关系。
|
15
yEhwG10ZJa83067x 2019-11-24 19:42:38 +08:00
|
16
yEhwG10ZJa83067x 2019-11-24 19:51:57 +08:00
|
17
5200 2019-11-25 11:57:33 +08:00
```
//header('X-Accel-Buffering: no'); if (ob_get_level() == 0) ob_start(); for ($i = 0; $i<30; $i++){ echo "<br> Line to show."; echo str_pad('',4096)."\n"; echo date('Y-m-d H:i:s')."\n"; ob_flush(); flush(); sleep(1); } echo "Done."; ob_end_flush(); ``` ![image.png]( https://i.loli.net/2019/11/25/AaSfOzWlDMZgpwo.png) 如果是用 Apache,可以直接每秒输出一条记录 。 如果是 nginx 作为 web 服务器时,就需要加上 header('X-Accel-Buffering: no'); |
19
otakustay 2019-11-25 16:20:27 +08:00
@julyclyde 这是对的,但问题是 http 很容易选 chunked 模式啊……即使 PHP 不是 chunk,前面的 nginx 可能也给你 chunk 掉了
|
20
lysS OP |