Video 从go服务器高效地流式传输大文件(视频)

Video 从go服务器高效地流式传输大文件(视频),video,go,server,stream,Video,Go,Server,Stream,我正在Go中实现视频流服务器。 我目前正在使用standard,但我不确定它在处理大文件(4GB+)时是否有效 有没有一种方法可以有效地为Go中的大文件提供服务?我不确定您所说的“高效”是什么意思,所以我假设您的意思是大文件是流式的,而不是缓冲的 标准的http.FileServer最终使用写入数据,这需要io.readseek作为内容(幸运的是文件就是这样) 然后使用io.Copy复制内容,这在一般情况下(虽然可能不是您的常见情况,请参见下文)意味着。将使用32KB的缓冲区 因此,假设http

我正在Go中实现视频流服务器。 我目前正在使用standard,但我不确定它在处理大文件(4GB+)时是否有效


有没有一种方法可以有效地为Go中的大文件提供服务?

我不确定您所说的“高效”是什么意思,所以我假设您的意思是大文件是流式的,而不是缓冲的

标准的
http.FileServer
最终使用写入数据,这需要
io.readseek
作为内容(幸运的是文件就是这样)

然后使用
io.Copy
复制内容,这在一般情况下(虽然可能不是您的常见情况,请参见下文)意味着。将使用32KB的缓冲区

因此,假设
http.ResponseWriter
的实现不缓冲其输入(,另请参见),内存利用率应该是恒定的

但是,当编写器支持
ReadFrom
方法时。因为
http.response
ResponseWriter
接口的标准实现),所以将使用它代替
copyBuffer
。此实现将在可能的情况下尝试使用
sendfile
系统调用(如
os.File
),这是一种更为有效的含义(数据根本不必经过进程内存空间,因此尽可能好)

换句话说,我认为可以合理地说,内置的
net/http
包已经支持大文件的高效流式传输