使用 Gorilla Mux 端点通过 HTTP 流式传输数据
Using Gorilla Mux endpoint to stream data via HTTP
在我的 REST 端点上收到请求后,我想回复状态 200
和持续生成和刷新的数据主体(从数据库中获取并且可能非常大)。我正在寻找一种使用 Gorilla Mux 的有效方法,因为它已在整个项目中使用。
我看到 Labstack Echo, since it's ResponseWriter
supports http.Flusher
(interface 可以允许 HTTP 处理程序将缓冲数据刷新到客户端)。可惜gorilla的ResponseWriter
好像不支持这个
问题:
- 有没有办法让 Gorilla Mux 有这种行为?
- 如果没有,我会很感激指向 'slimmest' 方法的指针以实现此行为(我已经找到了 Labstack Echo,但也许有更好的方法?)
不变量:
- 我无法使用
WebSockets
,应该将解决方案与 REST API 集成。
- 我将无法在服务器内存中保存整个文件。
您可以在 gorilla/mux 中使用 Flush,因为它使用标准库中的 http.ResponseWriter
实现。您可以通过在您的处理程序中使用下面的代码来使用 Flush
方法
func YourHandler(w http.ResponseWriter, r *http.Request) {
//SomeCode
w.(http.Flusher).Flush()
}
在我的 REST 端点上收到请求后,我想回复状态 200
和持续生成和刷新的数据主体(从数据库中获取并且可能非常大)。我正在寻找一种使用 Gorilla Mux 的有效方法,因为它已在整个项目中使用。
我看到 Labstack Echo, since it's ResponseWriter
supports http.Flusher
(interface 可以允许 HTTP 处理程序将缓冲数据刷新到客户端)。可惜gorilla的ResponseWriter
好像不支持这个
问题:
- 有没有办法让 Gorilla Mux 有这种行为?
- 如果没有,我会很感激指向 'slimmest' 方法的指针以实现此行为(我已经找到了 Labstack Echo,但也许有更好的方法?)
不变量:
- 我无法使用
WebSockets
,应该将解决方案与 REST API 集成。 - 我将无法在服务器内存中保存整个文件。
您可以在 gorilla/mux 中使用 Flush,因为它使用标准库中的 http.ResponseWriter
实现。您可以通过在您的处理程序中使用下面的代码来使用 Flush
方法
func YourHandler(w http.ResponseWriter, r *http.Request) {
//SomeCode
w.(http.Flusher).Flush()
}