In traditional web app users have no idea about server’s current state. But in real time web application (chat application, games) users are interact with server and other user in real time. Real time web applications need data to be shared very fast over the server and client side. Blocking I/O models are not suitable for data intensive applications like that, then comes Node.js which support non-blocking I/O model, that is main reason why node.js popular for real time web application like (chat applications, on line gaming, Live streaming). Node.js also support Web Socket, which is main technology for building real time web applications.
Non-Blocking Asynchronous model
In synchronous programming model code executing in a sequence. And blocking model block the second code to execute until first code is done. So both blocking and synchronous model are not very suitable for real time web application.
Non-blocking, Asynchronous model which is used in Node have only one thread to respond all the request. Node.js uses event programming when our node server started it declared functions. There is single Thread event loop which has list of all the events, if event is declared then our event loop triggers a call back function.
For example, if two requests came to server at same time to connect to data base, you can trigger first request and while first request running you can start to respond to second request
image source: think360studio
EXAMPLE OF BLOCKING AND NON BLOCKING
Using the file system module is an example of synchronous model create block.txt file have some text in it, and write fallowing code in main.js file
var fs= require(fs);
var data = fs.reasFileSync(/block.txt)
console.log(data.toString());
console.log(blocking code)
run main js file using given command in terminal
node main.js
You can see in output prints text of block.txt first and then console.log, because console.log command is blocked until block.txt load.
Now use non-blocking code in main.js
var fs = require(fs)
var data = fs.readFile(block.txt, function (err, data){
if(err) return console.error(err);
console.log(data.toString());
});
console.log (non-blocking code);
Run code again with node main.js commad in terminal
Output: shows that console.log prints first then text of block.txt, in this code program not wait for block.txt to load.
0 Comment(s)