我假设Node.js持续监听事件,并在事件触发时异步处理监听器代码。
我尝试使用“事件”模块定义自定义事件,该模块在脚本中手动发出。
var events = require('events');
var myEmitter = new events.EventEmitter();
myEmitter.on('someEvent', function(msg){
console.log(msg);
});
myEmitter.emit('someEvent', 'the event is emitted');
当我运行上述脚本时,该过程仅在处理一次事件后终止。 Node.js如何知道将来不会触发更多事件?我已经看到“ http”模块的server.listen()连续侦听传入的连接,并且在获得第一个连接后不会终止。为什么我的代码行为不相同?
或者换句话说,我该如何定义异步并连续监听的事件?
编辑:我还想知道意外发生的事件(例如,浏览器按钮单击,服务器建立连接等)如何在后台运行,从而使程序连续运行而不会终止。
答案 0 :(得分:1)
我们在这里谈论两件事。事件和套接字。
在您的情况下,您要对节点表示,当名为someEvent
的事件出现时,您要处理它。然后,您将发出此事件。完成后,node.js会看到有一个针对它的自定义处理程序,并调用了您的函数。函数结束时,程序中无事可做,并且终止。
Node.js不会主动等待:
while (1) {
if (isThereANewEvent()) treatTheNewEvent();
}
这是一个被动的等待。
另一方面,套接字是I / O,当您启动服务器时,它会处于活动等待状态。这就是为什么您的程序在调用.listen