情况:
我有一个Node.JS服务器。 NGINX设置为将请求的大小限制为5MB。
我需要从运行在浏览器中的客户端向服务器上载大文件(〜15MB)。
有3个服务器实例在没有共享内存/文件系统的情况下运行。
我所做的事情:
我使用了一些库将文件分解为大块(<5MB),然后将它们发送到服务器。在将最后一个块成功发送到服务器后,客户端调用服务器端点以发出信号通知完成,然后合并块。当我有一个服务器实例运行时,此方法有效。由于负载平衡等原因,每个发送块的请求都可能由服务器的不同实例处理。因此,这些块可能无法正确合并。
我想到的解决方案:
最终的解决方案(在我看来)将是如何仅在一个请求中将块流式传输到服务器,该请求仅由一个服务器实例处理。
Stream API仍处于试验阶段。我想尝试,但没有找到一个好的榜样。我听说客户端的Stream API与Node.JS上的流不同,还需要做更多的事情。
我对HTTP标头的Transfer-Encoding: chunked
做了一些研究。有人说发送大文件很好,但是我没有找到一个很好的例子来实现这一目标。
我还想到了WebSocket(甚至Socket.io)与服务器实例建立连接并发送块。但是,有些阅读告诉我,WebSocket并不是发送大文件的好方法。
问题:
如何实现以最有效的方式将大文件发送到一个服务器实例的目标?