各位前辈,我才接触nodejs不久。 发现nodejs的非阻塞 只是没有阻塞当前请求,但是会阻塞下次请求。 比如下面的代码: function sleep(milliSeconds) { var startTime = new Date().getTime(); while (new Date().getTime() < startTime + milliSeconds); } var events=require(‘events’); var emitter=new events.EventEmitter(); emitter.on(‘myevent’,function(){ sleep(10000); console.log(‘myevent’); }) var http=require(‘http’); http.createServer(function(req,res){ if(’/’==req.url){ emitter.emit(‘myevent’); } res.end(‘xxx’); }).listen(80);
当我们访问 http://localhost/xxx 是不会阻塞的 。 如果访问根目录 http://localhost/ 也不会阻塞, 因为 sleep的 10秒 在定义的事件里面。 但是 在这10秒内, 再发起任何其他请求 都会被阻塞。
用什么方法来避免这种阻塞?
你都sleep了当然会阻塞咯,一般说非阻塞是说等待IO响应的时候是非阻塞的。
延时操作用setTimeout(cb, ms)或setInterval(cb, ms) 非阻塞的意思只是保证你读写IO不会阻塞(卡着)