如何用 Next.js v14 实现一个 Streaming 接口?

💡 原文中文,约9200字,阅读约需22分钟。
📝

内容提要

本文介绍了如何使用Next.js v14实现一个Streaming接口。首先讲解了Streaming的概念和Fetch API的使用方法。然后详细介绍了如何读取和创建ReadableStream类型的内容。接着给出了一个基本示例,展示了如何使用Next.js完成一个具有Streaming功能的接口。最后,还介绍了如何调用OpenAI接口实现Streaming。整篇文章内容详实,适合对Streaming有兴趣的读者阅读。

🔎

延伸解读

Streaming 接口的核心机制

文章指出,Streaming 接口依赖 HTTP 的 Transfer-Encoding: chunked 标头,将数据分块发送。在 Next.js 中,通过创建 ReadableStream 并返回 Response,即可实现分块传输。前端使用 response.body.getReader() 递归读取,逐步渲染内容。这种机制适合大文件或实时交互场景,但需注意 HTTP/1.1 才支持分块传输。

开发环境下的注意事项

文章提醒,Next.js 开发模式默认开启 React Strict Mode,会导致请求被调用两次,可能影响 Streaming 的测试结果。可以在 next.config.js 中设置 reactStrictMode: false 来关闭。此外,示例中使用了 sleep 函数模拟延迟,便于观察分块效果。实际部署时,应确保生产环境不会因此产生重复请求。

与 OpenAI 接口的集成要点

文章展示了如何调用 OpenAI 的流式接口,将返回的 chunk 通过迭代器转换为 ReadableStream。需要准备 OpenAI API 密钥,并设置 baseURL 为代理地址。前端通过 POST 请求发送消息,并逐块读取响应,实现打字机效果。注意,示例中密钥直接写在 .env.local 中,实际项目应妥善管理环境变量。

❓

Q&A

Streaming的概念是什么?

Streaming是将数据分段发送给客户端的技术,类似于流媒体,允许在不下载整个文件的情况下即时传输数据。

如何使用Fetch API获取Streaming数据?

使用Fetch API时,可以通过response.body获取一个ReadableStream类型的内容,进而读取流数据。

如何创建一个ReadableStream?

可以使用ReadableStream()构造函数,定义start、pull和cancel等方法来创建一个ReadableStream。

在Next.js中如何实现Streaming接口?

在Next.js中,可以通过底层API创建Streaming接口,使用ReadableStream将数据逐步推送到客户端。

如何在前端读取Streaming内容?

前端可以通过ReadableStream的getReader()方法读取流数据,并使用read()方法获取下一个数据块。

如何调用OpenAI接口实现Streaming功能?

调用OpenAI接口时,需要准备API密钥,并使用stream参数来获取流式响应。

🏷️

标签

➡️

继续阅读