使用 Gorilla Mux 端点通过 HTTP 流式传输数据

Posted

技术标签:

【中文标题】使用 Gorilla Mux 端点通过 HTTP 流式传输数据【英文标题】:Using Gorilla Mux endpoint to stream data via HTTP 【发布时间】:2018-02-08 17:47:18 【问题描述】:

在我的 REST 端点上收到请求后,我想回复状态 200 以及不断生成和刷新的数据主体(从数据库中获取并且可能非常大)。我正在寻找一种有效的方法来使用Gorilla Mux,因为它在整个项目中都被使用。

我看到Labstack Echo 是可能的,因为它是ResponseWriter supports http.Flusher(interface 允许 HTTP 处理程序将缓冲数据刷新到客户端)。不幸的是,大猩猩的ResponseWriter 似乎不支持这一点。


问题:

有没有办法让 Gorilla Mux 出现这种行为? 如果没有,我会很感激指向“最薄”方法的指针,否则可以实现此行为(我已经找到 Labstack Echo,但也许有更好的方法?)

不变量:

我不能使用WebSockets,应该将解决方案与 REST API 集成。 我无法将整个文件保存在服务器内存中。

【问题讨论】:

Gorilla 的多路复用器将 ResponseWriter 从服务器传递到应用程序。如果您的应用无法获取 http.Flusher,则会发生其他情况。 【参考方案1】:

您可以在 gorilla/mux 中使用 Flush,因为它使用标准库中的 http.ResponseWriter 实现。您可以通过在处理程序中使用以下代码来使用Flush 方法

func YourHandler(w http.ResponseWriter, r *http.Request) 
    //SomeCode

    w.(http.Flusher).Flush()

【讨论】:

我似乎忽略了这一点。谢谢,这解决了我的问题。

以上是关于使用 Gorilla Mux 端点通过 HTTP 流式传输数据的主要内容,如果未能解决你的问题,请参考以下文章

gorilla/mux 的学习

Golang Gorilla mux 与 http.FileServer 返回 404

小白学标准库之 mux

使用 gorilla mux 提供 HTML

如何组织 gorilla mux 路线?

gorilla mux 在使用变量时为静态文件设置了错误的路径