我在源码中看到一个services目录,里面有at.js/mail.js/message.js。 我原以为这几个是基于队列作为服务后台执行。
因为我nodejs初学,对其异步模型还不算特别了解,不知道发送邮件如果耗时很长会不会导致UI阻塞,于是我简单修改了一下源码,在mail.js的sendmail方法里面增加了延时处理,结果发现注册帐号时,界面会一直等待,难道不能界面先返回,邮件慢慢发送?
6 回复
@hexie 还是不明白为什么循环会阻塞,不循环就不会阻塞 参考代码
if (config.debug) { console.log(‘******************** 在测试环境下,不会真的发送邮件*******************’); for (var i=0;i<1000;i++) { var now = new Date().getTime(); while(new Date().getTime() < now + 1000) { // do nothing } for (var k in data) { console.log('%s: %s’, k, data[k]); } } return; }
@jimliu 不要用while,因为是异步执行的,对于发送邮件这种任务,是比较长时间等待IO或者消息的工作,node.js会马上返回,不会等到完成后执行的,node.js是单进程基于事件的设计,也就是只有单一个CPU去弄这件事情,如果这件事情遇到while,那么他就不能很好地处理其他任务了。