grpc 流式传输
下载各种文件(文本或二进制文件)是每个企业应用程序的生死攸关的事情。 PDF文档,附件,媒体,可执行文件,CSV,超大文件等。几乎每个应用程序迟早都必须提供某种形式的下载。 下载是通过HTTP来实现的,因此完全包含此协议并充分利用它很重要。 特别是在面向Internet的应用程序中,诸如缓存或用户体验之类的功能值得考虑。 本系列文章提供了实现各种下载服务器时可能要考虑的各个方面的列表。 请注意,我避免使用“ 最佳做法 ”一词,这些只是我认为有用的准则,但不一定总是适用。
最大的可伸缩性问题之一是在流传输之前将整个文件加载到内存中。 将完整文件加载到byte[]
以便稍后从Spring MVC控制器返回它,这是无法预测的,并且无法缩放。 服务器将消耗的内存量与并发连接数乘以平均文件大小成线性关系,而您实际上并不想太依赖这些因素。 将文件的内容从服务器直接逐字节流传输到客户端(使用缓冲)非常容易,实际上有很多技术可以实现。 最简单的一种是手动复制字节:
@RequestMapping(method = GET)
public void download(OutputStream output) throws IOException {
try(final InputStream myFile = openFile()) {
IOUtils.cop