Examples
流式响应
向客户端进行流式响应。
使用流式响应可以让你在获取数据后立即发送给客户端。这对于大文件或长时间运行的响应非常有用。
创建一个流
要进行流式响应,首先需要使用 ReadableStream
API 创建一个流:
const stream = new ReadableStream();
在示例中,我们将创建一个 start 函数,每 100 毫秒发送一个随机数。1000 毫秒后关闭流:
let interval: NodeJS.Timeout;
const stream = new ReadableStream({
start(controller) {
controller.enqueue("<ul>");
interval = setInterval(() => {
controller.enqueue("<li>" + Math.random() + "</li>");
}, 100);
setTimeout(() => {
clearInterval(interval);
controller.close();
}, 1000);
},
cancel() {
clearInterval(interval);
},
});
发送流
import { H3, setResponseHeader } from "h3";
export const app = new H3();
app.use((event) => {
// 设置响应头,告知客户端我们正在发送一个流。
setResponseHeader(event, "Content-Type", "text/html");
setResponseHeader(event, "Cache-Control", "no-cache");
setResponseHeader(event, "Transfer-Encoding", "chunked");
let interval: NodeJS.Timeout;
const stream = new ReadableStream({
start(controller) {
controller.enqueue("<ul>");
interval = setInterval(() => {
controller.enqueue("<li>" + Math.random() + "</li>");
}, 100);
setTimeout(() => {
clearInterval(interval);
controller.close();
}, 1000);
},
cancel() {
clearInterval(interval);
},
});
return stream;
});
打开浏览器访问 http://localhost:3000 ,你应该会看到每 100 毫秒出现一个随机数列表。
神奇!🎉