Video 从go服务器高效地流式传输大文件(视频)
我正在Go中实现视频流服务器。 我目前正在使用standard,但我不确定它在处理大文件(4GB+)时是否有效Video 从go服务器高效地流式传输大文件(视频),video,go,server,stream,Video,Go,Server,Stream,我正在Go中实现视频流服务器。 我目前正在使用standard,但我不确定它在处理大文件(4GB+)时是否有效 有没有一种方法可以有效地为Go中的大文件提供服务?我不确定您所说的“高效”是什么意思,所以我假设您的意思是大文件是流式的,而不是缓冲的 标准的http.FileServer最终使用写入数据,这需要io.readseek作为内容(幸运的是文件就是这样) 然后使用io.Copy复制内容,这在一般情况下(虽然可能不是您的常见情况,请参见下文)意味着。将使用32KB的缓冲区 因此,假设http
有没有一种方法可以有效地为Go中的大文件提供服务?我不确定您所说的“高效”是什么意思,所以我假设您的意思是大文件是流式的,而不是缓冲的 标准的
http.FileServer
最终使用写入数据,这需要io.readseek
作为内容(幸运的是文件就是这样)
然后使用io.Copy
复制内容,这在一般情况下(虽然可能不是您的常见情况,请参见下文)意味着。将使用32KB的缓冲区
因此,假设http.ResponseWriter
的实现不缓冲其输入(,另请参见),内存利用率应该是恒定的
但是,当编写器支持ReadFrom
方法时。因为http.response
(ResponseWriter
接口的标准实现),所以将使用它代替copyBuffer
。此实现将在可能的情况下尝试使用sendfile
系统调用(如os.File
),这是一种更为有效的含义(数据根本不必经过进程内存空间,因此尽可能好)
换句话说,我认为可以合理地说,内置的net/http
包已经支持大文件的高效流式传输