【发布时间】:2012-05-17 14:14:52
【问题描述】:
以下是我的nodejs代码
var emitter = require('events'),
eventEmitter = new emitter.EventEmitter();
eventEmitter.on('data', function (result) { console.log('Im From Data'); });
eventEmitter.on('error', function (result) { console.log('Im Error'); });
require('http').createServer(function (req, res) {
res.end('Response');
var start = new Date().getTime();
eventEmitter.emit('data', true);
eventEmitter.emit('error', false);
while(new Date().getTime() - start < 5000) {
//Let me sleep
}
process.nextTick(function () {
console.log('This is event loop');
});
}).listen(8090);
Nodejs 是单线程的,它在事件循环中运行,并且同一个线程为事件提供服务。 因此,在上面对我的 localhost:8090 节点的请求的代码中,节点线程应该一直忙于为请求提供服务[有 5 秒的睡眠]。
同时有两个事件被 eventEmitter 发出。因此,一旦请求得到处理,这两个事件都必须在事件循环中排队等待处理。
但这并没有发生,我可以看到事件在发出时同步提供。
这是预期的吗?我知道如果它按我的预期工作,那么扩展事件模块就没有用了。但是 eventEmitter 发出的事件是如何处理的呢?
【问题讨论】:
-
只是推测您报告的内容......似乎 eventEmitter.emit 是同步处理的(不是异步的)。这意味着它们永远不会在事件队列中排队... FWIW,这就是我一直在 java 中实现所有侦听器/事件模式的方式。所以这看起来似乎是正确的行为
标签: node.js eventemitter