Reactive Programming - RxJS vs EventEmitter in Node.js

Recently I've started looking at RxJS and RxJava(from Netflix) libraries which work on the concept of Reactive Programming.

Node.js works on the basis of event loops, which provides you all the arsenal for asynchronous programming and the subsequent node libraries like "cluster" help you to get best out of your multi-core machine. And Node.js also provides you the EventEmitter functionality where you can subscribe to events and act upon it asynchronously.

On the other hand if I understand correctly RxJS (and Reactive Programming in general) works on the principle of event streams, subscribing to event streams, transforming the event stream data asynchronously.

So, the question is what does using Rx packages in Node.js mean. How different is the Node's event loop, event emitter & subscriptions to the Rx's streams and subscriptions.

You are correct that Rx streams and EventEmitter are very similar, both are implementations of the Observer pattern.

The difference is that Rx contains functions for transforming and combining event streams. Imagine for instance that we want to delay each "response event" by 2 seconds. With EventEmitter, you would have to subscribe to that, and manually make a timeout:

eventEmitter.on('response', function(res) {
    setTimeout(function() { /* handle res */ }, 2000);
});

With Rx, you can create a new event stream which is simply the original stream applied to the delay function:

responseStream.delay(2000).subscribe(function(res) {
    /* handle res */
});

delay() is a simple function, and one of the many others available. There are so many different ways of modifying streams, that it becomes possible to program a lot of application logic just by transforming streams with all the possible functions, instead of relying on low-level logic such as setTimeout.

Also check out this visual and interactive exploration of those functions.