Real-time communication is an omnipresent functionality in contemporary applications. Users expect to see when their friend is typing in a chat app. Investors want the stock quotes to tick in front of their eyes. In social media, we want likes and shares counts to add up on the fly as we scroll down through tweets or posts. Coworkers want to see their collaborators’ edits being made in a shared Google Doc, or a Trello task card being dragged and dropped.
In technical terms, users expect the apps to "talk" real-time between each other. In the times of yore, a web application (a client) would send a request via a browser to a server checking if there's any new information waiting (a message, article, etc.). This procedure of "pulling" content was usually done with an HTTP protocol in set intervals. The alternative was to "push" updates to users, which would be sent, when the app’s designers think the users need them.
In traditional applications, if you wanted to see what the other person was typing in a document, the server had to continually send requests to your browser asking: “Do we have a new letter?”, “No!”, “Do we have a new letter?”, “No!”, “Do we have a new letter?”, “Yes, it’s an L,” “do we have a new letter?”, “No”... It wasn’t the best solution. Today, such an approach is unacceptable in many cases as real-time has become a standard.
If you type a letter in Google Docs, the browser instantly sends the information to the server, and the server comes back with a reply. That is why people working on the document can see the text as you type. This is much more convenient, and it is also the reason why real-time protocols are trending.
WebSocket requires its own backend application to communicate with (server-side). Therefore you have to write a single-purpose server and, in my opinion, in this situation, Node.js is much better than writing your server in Java, C++, PHP, or whatever.
WebSocket opens a communication channel between two parties (server-client or client-client) and allows smooth communication both ways. The data can be sent and received freely without any requests.
Not only does Node.js have excellent WebSocket support, but, being the most popular framework right now, it also has the best libraries and modules for WebRTC (another real-time protocol, used by Google Hangouts), which provides direct peer-to-peer real-time communication via APIs without the need of installing browser plugins or native apps. Since Node.js is an asynchronous engine, it has beena perfect match for WebRTC since its release in 2011.
If you plan to build an app that includes features such as chat, remote collaboration, or any other type of interactions with users, you should consider Node.js as your backend technology. Even if you don’t plan to have real-time features in your web application, it is likely that such a need will appear later. In this case, if you choose Node.js, adding a WebSocket module will be much easier.