Real-time apps explained
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.
The WebSocket protocol is the most popular real-time communication solution, and Node.js is a runtime environment that serves it best. In this real-time chat tutorial, a Node.js developer explains why Node.js is a perfect technology for real-time communication:
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 been a perfect match for WebRTC since its release in 2011.
WebSockets and other real-time protocols became popular thanks to Node.js, which was the first backend solution that allowed direct communication. Node.js allows for a much faster exchange of data between the client and the server than most other technologies. It also provides a steady and continuous connection between a browser and a server, and, every time a server and the client want to talk, the information shows up immediately.
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.