[PHP] 纯文本查看 复制代码 <?php
// 设置页面不缓存
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
header('X-Accel-Buffering: no');
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:*');
header('Access-Control-Allow-Headers:Content-Type,Content-Length, Authorization, Accept,X-Requested-With,Access-Toke');
// 开启输出缓冲
ob_start();
for ($i = 0; $i < 3; $i++) {
$data = [
'ctime' => time(),
'value' => $i
];
echo 'data: ' . json_encode($data, JSON_UNESCAPED_UNICODE) . "\n\n";
// 刷新输出缓冲并立即发送数据到客户端
ob_flush();
flush();
sleep(3);
}
// 关闭输出缓冲并且刷出(发送)缓冲区内容
ob_end_flush();
?>
[JavaScript] 纯文本查看 复制代码 <template>
<div>
<button @click="startFetch">开始请求</button>
</div>
</template>
<script>
export default {
methods: {
startFetch () {
// 使用 Fetch API 发起请求
fetch('http://192.168.1.25:2012/test2.php')
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok')
}
// 返回一个可读流并实时处理数据
const stream = response.body.getReader()
const decoder = new TextDecoder()
return new ReadableStream({
start (controller) {
// 读取并处理服务器发送的数据
const read = () => {
stream.read().then(({ done, value }) => {
if (done) {
controller.close()
return
}
const message = decoder.decode(value, { stream: true })
console.log('message', message)
// 继续读取下一条消息
read() // 递归调用自身以持续读取数据
})
}
read()
}
})
})
.catch(error => {
console.error('Fetch 请求发生错误:', error)
})
}
}
}
</script>
前端代码中console.log('message', message)输出了全部。我想要的是,同步实时输出。不知道怎么实现。测试了很多遍了。ai也问了很多遍了。 |