为什么Node.js不连续监听事件?

时间:2019-01-08 10:22:46

标签: node.js events

我假设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()连续侦听传入的连接,并且在获得第一个连接后不会终止。为什么我的代码行为不相同?

或者换句话说,我该如何定义异步并连续监听的事件?

编辑:我还想知道意外发生的事件(例如,浏览器按钮单击,服务器建立连接等)如何在后台运行,从而使程序连续运行而不会终止。

1 个答案:

答案 0 :(得分:1)

我们在这里谈论两件事。事件和套接字。

在您的情况下,您要对节点表示,当名为someEvent的事件出现时,您要处理它。然后,您将发出此事件。完成后,node.js会看到有一个针对它的自定义处理程序,并调用了您的函数。函数结束时,程序中无事可做,并且终止。

Node.js不会主动等待:

while (1) {
  if (isThereANewEvent()) treatTheNewEvent();
}

这是一个被动的等待。


另一方面,套接字是I / O,当您启动服务器时,它会处于活动等待状态。这就是为什么您的程序在调用.listen

之后不会终止的原因
相关问题