我有一项任务,可以从网络上的多个来源检索每个图像。我使用节点作为代理服务,因此当收到图像请求时,节点在内部点击可用于图像的3-4个源并返回第一个响应的源。
我还想支持图像处理任务,例如裁剪,调整大小,旋转等。为此,我使用了imagemagick。但我明白图像处理是一项繁重的任务会阻塞线程。即使我将CDN放在节点服务器前面,它仍然会在很多负载下崩溃。
这项任务的最佳安排是什么?节点中是否有可能的解决方法?我应该将所有代码切换到其他技术吗?或者我应该将代理部分保留在其他地方的节点和操作部分中吗?
答案 0 :(得分:1)
在启动单独的ImageMagick进程以使用https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx操作图像时,在Node.js中执行请求和响应。通过这种方式,当ImageMagick操纵图像时,Node.js不会阻塞。
答案 1 :(得分:0)
Node.js应该能够处理它。
即使图像处理是一项繁重的任务,您也不必阻止该线程使其正常工作。有一个异步框架将图像传递给imagemagick,让它通过回调通知node.js然后再回到客户端。
此外,如果您需要大量负载,可以让node.js服务器在多个节点上运行,并将nginx作为负载均衡器。
答案 2 :(得分:0)
不要错过Node.js模块的图像操作性能 - https://github.com/ivanoff/images-manipulation-performance
比较示例:
Found images:
4198671-green-sea-view.jpg
Beautiful-Sea-Pier-In-Chile-Hdr-Wide-Desktop-Background-Wallpapers-Beautiful-Sea-Wallpaper-.jpg
Bluestone-valley-view_-_Virginia_-_ForestWander.jpg
Found modules: canvas.js, gm-imagemagic.js, gm.js, lwip.js
== START ==
canvas.js : 4.001 img/sec; done in 7.498536 sec; minCPUidle: 96%; minFreeMem: 283Mb; MaxLoadAvg: 1.48
gm-imagemagic.js : 1.206 img/sec; done in 24.88003 sec; minCPUidle: 96%; minFreeMem: 456Mb; MaxLoadAvg: 1.59
gm.js : 1.536 img/sec; done in 19.528429 sec; minCPUidle: 96%; minFreeMem: 490Mb; MaxLoadAvg: 1.84
lwip.js : 0.406 img/sec; done in 73.891623 sec; minCPUidle: 96%; minFreeMem: 157Mb; MaxLoadAvg: 1.56
== DONE ==
在这个例子中你可以看到,比canvas模块是最好的,关于图像处理的速度(在作者的本地计算机上每秒约4个imgages) 如果你想要代理,我希望它有用。