我有一个基于 Martini 的小型应用程序,但遇到了一个我无法解决的问题。
我想添加一个应用程序功能,允许用户从第三台服务器获取文件,并对 HTTP 标头进行一些更改。某种代理。这些文件非常大(每个 200+Mb),我希望将这些文件“流式传输”到客户端。“流”是指文件数据应该在应用程序接收到第一个字节后立即开始返回到客户端,而不会将整个文件保存在磁盘和/或内存中。
Martini 和 Go 有可能吗?
是的,一般来说 Go 是可能的,我对 Martini 不是特别熟悉。调用远程文件的 http 响应返回一个Reader
接口,您的请求处理程序有一个Writer
接口。这意味着您可以读取数据流并写入数据流。让您的责任仅是操纵您想要的内容,并将转发的流“修补”到请求流。
Go 甚至ReverseProxy
在标准库中内置了一个实用程序:
http://golang.org/pkg/net/http/httputil/#ReverseProxy
如果您愿意,您可以混合使用 Martini 和标准 http 库。
[编辑] 阅读 martini 文档,您可以添加像标准库一样的原始 http 处理程序,这意味着您确实可以这样做:https ://github.com/codegangsta/martini#service-injection