使用 ASGI 框架 Starlette,它具有流式响应,利用 HTTP 响应中的一些
more_body
参数来表示块是否已完成流式传输(源代码)。 Starlette 有一篇文章谈到了这一点:Working with ASGI and HTTP。
这个
more_body
技术是使用HTTP的标准设计模式吗,比如服务器发送事件(SSE),还是Starlette特有的?
Starlette 流式响应中使用的
more_body
参数不是标准 HTTP 功能,而是 ASGI(异步服务器网关接口)规范的一部分。它特定于使用 ASGI 的异步 Python Web 框架,例如 Starlette。
– 表示是否有其他内容(作为请求消息的一部分)。more_body (bool)
- 如果
,消费应用程序应该等待,直到它获得一个将此设置为True
的块。False
- 如果
,则请求已完成并且应该得到处理。选修的;如果缺失则默认为 False。False
在 ASGI 和 Starlette 的上下文中,
more_body
用于指示响应是否完整或是否需要更多数据。当响应被传输时,将 more_body
设置为 True
告诉 ASGI 服务器即将有更多数据块。发送整个响应后,应将 more_body
设置为 False
,表示响应结束。
该机制不同于服务器发送事件 (SSE) 等标准 HTTP 功能。 SSE 是一种标准,允许服务器通过单个长期 HTTP 连接将更新推送到客户端。相比之下,
more_body
方法是一种特定于 ASGI 的方法,用于在框架的异步处理模型中管理流响应。