Examples
流响应
向客户端发送流响应。
流式传输是 h3 的一个强大功能。它允许您在获取数据的第一时间就将其发送给客户端。这对于大型文件或长时间运行的任务非常有用。
流式传输是复杂的,如果您不需要它,可能会变成负担。
创建流
要流式发送响应,首先需要使用 ReadableStream
API 创建一个流:
const stream = new ReadableStream();
在这个示例中,我们将创建一个启动函数,每 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 { createApp, setResponseHeader } from "h3";
export const app = createApp();
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 毫秒出现一个随机数字的列表。
神奇! 🎉