Предположим следующий сценарий:Потенциально запирая цикл событий в Node.js через EventEmitter
//Where "e" is a global object in the app
e = new EventEmitter;
...
//at some place in the app code I'm adding Listener 1
e.on('myEvent', function() {console.log('Listener 1)});
...
//at another place in the app code I'm adding Listener 2
e.on('myEvent', function() {console.log('Listener 2)});
...
//at another place in the app code I'm adding Listener N
e.on('myEvent', function() {console.log('Listener N)});
...
//finally in some place I'm emitting "myEvent"
e.emit('myEvent', p1, p2);
В тот момент, когда "e.emit ('MyEvent', p1, p2)" выполняется, то мой код, который находится под управлением основного потока узла (а не цикла события). И функция «испускать» является синхронной, поэтому «emit» вызывает в этот самый момент каждого из слушателей, прикрепленных к «myEvent» (в приведенном примере N слушателей). Таким образом, на самом деле, называя «e.emit („MyEvent“, p1, p2)» эквивалентно сделать следующие вызовы в традиционной императивной парадигме:
Listener1(p1,p2);
Listener2(p1,p2);
...
ListenerN(p1,p2);
И если N велик, я блокирующее цикл события, вызывает его текущий код, который контролирует основной поток, а не цикл событий.
Этот сценарий правдивый и возможен? По этой причине, что по умолчанию Node.js имеет максимум 10 слушателей?
Заранее благодарен!
Спасибо! Это очень ясно! – uyjco0