假设在同一个本地网络上,我们有两台Node JS服务器设置为Express:服务器A用于API,服务器F用于表单。
在接收服务器是Express API的两个NodeJS服务器之间发送文件的最有效方法是什么?文件大小在哪里重要?
如果我发送的文件是PDF文件(不超过50mb),通过HTTP将整个内容作为字符串发送是否有效?
算法如下:
在此算法中,服务器A(当存储到MongoDB中时)和服务器F(当它发送到服务器A时)都已将文件读入内存,并且两个服务器之间的请求大小相同作为文件。 (50Mb请求好吗?)
然而,有一点需要考虑的是 - 使用这种方法 - 我会在整个过程中使用ExpressJS样式的API,它将与应用程序的其余部分保持一致/list
,{{ 1}}请求也在路由中定义。我喜欢一致性。
与此算法相比,我探索了https://github.com/nkzawa/socket.io-stream方式,它脱离了服务器A上HTTP API的一致性(因为socket.io事件的处理程序不在路由中定义,而是在文件中定义有/details
)。
服务器F在var server = http.createServer(app);
:
routes/some_route.js
我说我要处理的PDF文件是< 50MB。但是,如果我以后使用这个程序发送更大的文件,socket.io是否可以更好地处理1GB文件,因为它正在使用流?
此方法会发送文件和详细信息,但我是这个库的新手,不知道是否应该将其用于此目的,或者是否有更好的方法来使用它。
我应该探索哪些替代方法?
答案 0 :(得分:1)
有很多方法可以做到这一点,但没有那么多做正确!
套接字io和wesockets在浏览器中使用时非常有效,但是由于你没有,所以不需要它。
你可以尝试的第一种方法是使用nodejs的内置网络模块,基本上它会在服务器之间建立一个tcp连接并传递数据。
您还应该记住,您需要发送数据块而不是整个文件,网络模块的socket.write
方法似乎非常适合您的情况检查它:https://nodejs.org/api/net.html
但是根据文件大小和并发性,内存消耗可能非常大。
如果你在两台服务器上运行linux,你甚至可以使用一个名为scp的简单linux命令将文件发送到零开始
nohup scp -rpC /var/www/httpdocs/* remote_user@remote_domain.com:/var/www/httpdocs &
你甚至可以使用windows到linux或其他方式。
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Windows的客户端scp是pscp.exe
希望这有帮助!