Использование событий EventEmitter в nodejs (экспресс/клиент)?

Просматривая код https://github.com/alepez/omxdirector, я вижу много фрагментов, где события испускаются процессом omxdirector

var play = function (videos, options) {
    if (omxProcess) {
      if (!paused) {
        return false;
      }
      sendAction('pause');
      paused = false;
      that.emit('play');
      return true;
    }
    if (!videos) {
      throw new TypeError("No files specified");
    }
    if (typeof videos !== 'string' && !util.isArray(videos)) {
      throw new TypeError("Incorrect value for videos: " + videos);
    }
    open(videos, options);
    that.emit('play');
    return true;
  };

Мой вопрос: кто потребляет эти события? Это на стороне сервера или на стороне клиента?

Я использую socket.io для связи между моим внешним клиентом angularjs и экспресс-сервером. Моя реализация выглядит следующим образом:

СЕРВЕР: Отвечает на запрос клиента «song:play»

var omx = require('omxdirector');
omx.setVideoDir('/home/pi/webapp/songs'); 
{...}
 socket.on('song:play', function(data,fn) {
        if(omx.isLoaded()) { 
            if(!omx.isPlaying()) {
                if(data.song === currentSong) {
                    omx.play();
                } else {
                    omx.stop();
                        omx.play(data.song, {audioOutput: 'local'});
                        currentSong = data.song;
                }
            } else {
                omx.stop();
                    omx.play(data.song, {audioOutput: 'local'});
                    currentSong = data.song;
            }
        } else {
                omx.play(data.song, {audioOutput: 'local'});
                currentSong = data.song;
            }
            fn(data);
      });
{...}

КЛИЕНТ: Издает «song:play»

function playSong(song) {
      socket.emit('song:play', { song: song }, function(data) {
        $scope.currentSong = data.song;
      });     

      // Songs.get({ song: song, action: 'play'}).$promise.then(function(data) {
      //   $scope.currentSong = data.song;
      // });
      $scope.isPlaying = true;
    }

Где именно подходит эмиттер omxdirector? Я не хочу задавать этот вопрос конкретно для omxdirector, но применим к любому приложению nodejs с экземпляром EventEmitter? Кто потребляет эти события?


person nitimalh    schedule 27.04.2016    source источник
comment
Эй, спасибо за ссылку, но это, по сути, отвечает на вопрос, чем они отличаются. Мой вопрос: могу ли я использовать события, генерируемые omxdirector, на моем сервере или клиенте??   -  person nitimalh    schedule 27.04.2016
comment
Вы путаете EventEmitter с socket.io. Первый (фрагмент 1) специфичен для Node (существуют некоторые реализации на стороне клиента, но они не являются стандартными). Последний (фрагменты 2 и 3) имеет EE-подобный API, но действует как мост между сервером и клиентом. Это яблоки и апельсины.   -  person Estus Flask    schedule 27.04.2016
comment
Спасибо, Эстус. Я понимаю, что вы сейчас говорите. Таким образом, я не получил бы реальной выгоды от событий omxdirector, если бы я не хотел отправлять статус клиенту с помощью socket.io, выдающего каждый раз, когда omxdirector выдает сообщение? Я прав ?   -  person nitimalh    schedule 27.04.2016
comment
Я думаю, да, это похоже на код, который вы опубликовали.   -  person Estus Flask    schedule 27.04.2016