处理图片的时候会阻塞服务器,请教下,有什么好的解决方案么?
服务器需要将上传收到的几张图片进行裁剪并合成,用了jimp这个库,print绘制文本,和write保存图片到本地比较耗时,这个过程中服务器完全无法响应其他请求。
请教各位前辈,一般这种情况怎么处理好?还是说node服务器本身就不适合用来处理图片?
11 回复
处理图片这种要用到很多压缩算法,而且还占内存,明显不是nodejs擅长的,这种可以放到后台队列中处理 然后前端用ajax请求处理处理,服务器处理完成以后再返回最终图片的url
一般这种情况怎么处理好?
加机器。
write本身应该也是异步的,如果完全无法接受请求可能是用了同步写的方法, 最好贴一贴代码来
你的业务逻辑有问题,应该分开处理,web 服务器只处理入库,通过后台任务去调度执行图片处理,对于用户那边,是他上传完后,不要干等处理,而是等待后台处理完后的消息推送。
Jimp.loadFont(p).then(function (font) {
image.print(font, 5, 5, text);
image.write(dest);
console.log('Compose pics finished.');
cb(null, dest);
}).catch((err) => {
console.log(err);
cb(err);
});
image 是通过 new Jimp 生成的对象,p是字体路径。主要就是 print 和 write 耗时,看了下jimp的接口貌似也没说是异步还是同步,文档示例也是这样用的
用golang处理图片吧,好像它带这些库
来自酷炫的 CNodeMD
…imagemagick,用npm包或者是手写脚本spawn, exec
最后参这篇文章来处理了,感谢楼上各位指点!:)
我用gm模块,没有发生你说的事情哎
@moshuqi 处理图片交给其他进程。通信可以基于http,需要对方包装一下对你提供接口。 或者直接node调用系统命令通信也行,http://www.cnblogs.com/zhoujie/p/nodejs2.html