Node.js不是file upload(以及所有基于事件循环的语言)的好select – 是真的吗?

据说使用Node.js并不build议上传文件,因为它阻塞了IO循环直到完成,所以我试图stream式上传许多并发文件,并且我发现Sails.js(包装express和node)上传从第一,第二,第三…到N上传器,然后再回到第一上传器,以循环方式获得下一个块,结果是:所有file upload几乎同时完成这种方式类似于上传一个大小等于并发上传文件聚合大小的大文件。

我最后得出结论,高命中率的file upload系统不应该采用IO事件循环技术的语言来devise,而是每个连接的上传客户端都应该在服务器上有自己的线程来实现不同上传之间的正确分离以及服务器内存大小和客户端数量之间的线性关系。

我在这里得到了一个正确的结论,还是我误解了一些东西?

你的结论是

每个连接的上传客户端都应该在服务器上有自己的线程,以实现不同上传之间的正确分离

是不正确的,因为进程中的每个线程都会消耗内存pipe理,线程切换等资源。 因此,在具有无限线程的线程环境中构build命中率文件上载不会扩展。 在node.js中使用基于stream的上传解决scheme时,与其他语言/平台相比,应用程序的内存占用和性能应该相当有竞争力。

你的结论离不开事实。 基于事件循环的并发对于file upload等I / O任务是非常有效的(同时发生)。 当你的代码运行的时候,事件循环被阻塞 – 事件callback,比如连接就绪,还有更多的数据可用等。在你的代码中,你只需要做一些非常快速的事情,比如说你想要对数据做什么,填充缓冲区和I / O传输由OS内核处理。 在现代计算机上,您可以做类似60000(+/- 50000)的并发传输,同时保持代码正常运行。