SlideShare una empresa de Scribd logo
1 de 21
THE SERVER-SIDE JAVASCRIPT
● Description
● Introduction
● Some (Confusing) Theory
● 4 Examples
● A couple of weird diagrams
● 2 Pics showing unbelievable benchmarks
● Some stuff from Internet
● And Homer Simpson
Agenda
Description
● V8 is an open source JavaScript engine developed by Google. Its written
in C++ and is used in Google Chrome Browser.
● Node.js runs on V8.
● It was created by Ryan Dahl in 2009.
● Is still in Beta phase. Latest version is 0.6.11
● Is Open Source. It runs well on Linux systems, can also run on Windows
systems.
● If you have worked on EventMachine (Ruby) or Python’s Twisted or Perl’s
AnyEvent framework then following presentation is going to be very easy.
Introduction
● In simple words Node.js is ‘server-side JavaScript’.
● In not-so-simple words Node.js is a high-performance network
applications framework, well optimized for high concurrent environments.
● It’s a command line tool.
● In ‘Node.js’ , ‘.js’ doesn’t mean that its solely written JavaScript. It is 40%
JS and 60% C++.
● From the official site:
‘Node's goal is to provide an easy way to build scalable network programs’ -
(from nodejs.org!)
Introduction: Advanced (& Confusing)
● Node.js uses an event-driven, non-blocking I/O model, which makes it
lightweight. (from nodejs.org!)
● It makes use of event-loops via JavaScript’s callback functionality to
implement the non-blocking I/O.
● Programs for Node.js are written in JavaScript but not in the same
JavaScript we are use to. There is no DOM implementation provided by
Node.js, i.e. you can not do this:
var element = document.getElementById(“elementId”);
● Everything inside Node.js runs in a single-thread.
● Single Threaded :
Node use a single thread to run instead of other server like Apache HTTP who spawn a thread
per request, this approach result in avoiding CPU context switching and massive execution
stacks in memory. This is also the method used by nginx and other servers developed to counter
the C10K problem.
● Event Loop :
Written in C++ using the Marc Lehman’s libev library, the event loop use epoll or kqueue for
scalable event notification mechanism.
● Non blocking I/O :
Node avoid CPU time loss usually made by waiting for an input or an output response
(database, file system, web service, ...) thanks to the full-featured asynchronous I/O provided by
Marc Lehmann’s libeio library.
These characteristics allow Node to handle a large amount of traffic by handling as quickly as
possible a request to free the thread for the next one.
Node has a built-in support for most important protocols like TCP, DNS, and HTTP (the one
that we will focus on). The design goal of a Node application is that any function performing
an I/O must use a callback. That’s why there is no blocking methods provided in Node’s
API.
Example-1: Getting Started & Hello
World● Install/build Node.js.
● (Yes! Windows installer is available!)
● Open your favorite editor and start typing JavaScript.
● When you are done, open cmd/terminal and type this:
‘node YOUR_FILE.js’
● Here is a simple example, which prints ‘hello world’
var sys = require(“sys”);
setTimeout(function(){
sys.puts(“world”);},3000);
sys.puts(“hello”);
//it prints ‘hello’ first and waits for 3 seconds and
then prints ‘world’
Some Theory: Event-loops & Architecture
● Event-loops are the core of event-driven programming, almost all
the UI programs use event-loops to track the user event, for
example: Clicks, Ajax Requests etc.
Client
Event loop
(main thread)
C++
Threadpool
(worker
threads)
Clients send HTTP
requests
to Node.js server
An Event-loop is woken up by
OS,
passes request and response
objects
to the thread-pool
Long-running jobs
run
on worker threads
Response is sent
back to main
thread
via callback
Event loop
returns
result to client
Some Theory: Non-Blocking I/O
● Traditional I/O
var result = db.query(“select x from table_Y”);
doSomethingWith(result); //wait for result!
doSomethingWithOutResult(); //execution is blocked!
● Non-traditional, Non-blocking I/O
db.query(“select x from table_Y”,function (result){
doSomethingWith(result); //wait for result!
});
doSomethingWithOutResult(); //executes without any delay!
Node.js Server VS Multi Threaded Server
What can you do with Node.js ?
● You can create an HTTP server and print ‘hello world’ on the browser in just
4 lines of JavaScript. (Example included)
● You can create a TCP server similar to HTTP server, in just 4 lines of
JavaScript. (Example included)
● You can create a DNS server.
● You can create a Static File Server.
● You can create a Web Chat Application like GTalk in the browser.
● Node.js can also be used for creating online games, collaboration tools or
anything which sends updates to the user in real-time.
Example -2 &3 (HTTP Server & TCP
Server)
● Following code creates an HTTP Server and prints ‘Hello World’ on the browser:
// Load the http module to create an http server.
var http = require('http');
// Configure our HTTP server to respond with Hello World to all requests.
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Worldn');
});
// Listen on port 5000, IP defaults to 127.0.0.1
server.listen(5000, "127.0.0.1");
How to Run A Http Example:
CMD ->Node Filename.js o/p-> Open Browser and type url
http://hostname:Portnumber For This Example http://127.0.0.1:5000
●Here is an example of a simple TCP server which listens on port 6000 and
echoes whatever you send it:
// Load the http module to create an tcp server.
var net = require('net');
// Configure our TCP server to respond with Echo Sever to all requests.
net.createServer(function (socket) {
socket.write("Echo serverrn");
socket.pipe(socket);
});
// Listen on port 6000, IP defaults to 127.0.0.1
net.listen(6000, "127.0.0.1");
How to Run A Tcp Example:
CMD ->Node Filename.js
o/p-> Open Browser and type url like --
http://hostname:Portnumber
http://127.0.0.1:5000
Node.js Ecosystem
● Node.js heavily relies on modules, in previous examples require keyword
loaded the http & net modules.
● Creating a module is easy, just put your JavaScript code in a separate js
file and include it in your code by using keyword require, like:
var modulex = require(‘./modulex’);
● Libraries in Node.js are called packages and they can be installed by
typing
npm install “package_name”; //package should be available in
npm registry @ nmpjs.org
● NPM (Node Package Manager) comes bundled with Node.js installation.
Example-4: Lets connect to a DB
(MongoDB)
● Install mongojs using npm, a mongoDB driver for Node.js
npm install mongojs
● Code to retrieve all the documents from a collection:
var db = require("mongojs")
.connect("localhost:27017/test", ['test']);
db.test.find({}, function(err, posts) {
if( err || !posts) console.log("No posts found");
else posts.forEach( function(post) {
console.log(post);
});
});
When to use Node.js?
● Node.js is good for creating streaming based real-time services, web chat
applications, static file servers etc.
● If you need high level concurrency and not worried about CPU-cycles.
● If you are great at writing JavaScript code because then you can use the
same language at both the places: server-side and client-side.
● More can be found at: http://stackoverflow.com/questions/5062614/how-
to-decide-when-to-use-nodejs
Some Node.js benchmarksTaken from: http://code.google.com/p/node-js-vs-
apache-php-benchmark/wiki/Tests
A benchmark between Apache+PHP and
node.js, shows the response time for 1000
concurrent connections making 10,000
requests each, for 5 tests.
Taken from:
http://nodejs.org/jsconf2010.pdf
The benchmark shows the
response time in milli-secs
for 4 evented servers.
When to not use Node.js
● When you are doing heavy and CPU intensive calculations on server side,
because event-loops are CPU hungry.
● Node.js API is still in beta, it keeps on changing a lot from one revision to
another and there is a very little backward compatibility. Most of the
packages are also unstable. Therefore is not yet production ready.
● Node.js is a no match for enterprise level application frameworks like
Spring(java), Django(python), Symfony(php) etc. Applications written on
such platforms are meant to be highly user interactive and involve
complex business logic.
● Read further on disadvantages of Node.js on Quora:
http://www.quora.com/What-are-the-disadvantages-of-using-Node-js
Appendix-1: Who is using Node.js in
production?
● Yahoo! : iPad App Livestand uses Yahoo! Manhattan framework which is
based on Node.js.
● LinkedIn : LinkedIn uses a combination of Node.js and MongoDB for its
mobile platform. iOS and Android apps are based on it.
● eBay : Uses Node.js along with ql.io to help application developers in
improving eBay’s end user experience.
● Dow Jones : The WSJ Social front-end is written completely in Node.js,
using Express.js, and many other modules.
● Complete list can be found at:
https://github.com/joyent/node/wiki/Projects,-Applications,-and-
Companies-Using-Node
Appendix-2: Resource to get started
● Watch this video at Youtube:
http://www.youtube.com/watch?v=jo_B4LTHi3I
● Read the free O’reilly Book ‘Up and Running with Node.js’ @
http://ofps.oreilly.com/titles/9781449398583/
● Visit www.nodejs.org for Info/News about Node.js
● Watch Node.js tutorials @ http://nodetuts.com/
● For Info on MongoDB: http://www.mongodb.org/display/DOCS/Home
● For anything else Google!
Appendix-3: Some Good Modules
● Express – to make things simpler e.g. syntax, DB connections.
● Jade – HTML template system
● Socket.IO – to create real-time apps
● Nodemon – to monitor Node.js and push change automatically
● CoffeeScript – for easier JavaScript development
● Find out more about some widely used Node.js modules at:
http://blog.nodejitsu.com/top-node-module-creators

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

NodeJS: an Introduction
NodeJS: an IntroductionNodeJS: an Introduction
NodeJS: an Introduction
 
Node js
Node jsNode js
Node js
 
Node js Introduction
Node js IntroductionNode js Introduction
Node js Introduction
 
3 Things Everyone Knows About Node JS That You Don't
3 Things Everyone Knows About Node JS That You Don't3 Things Everyone Knows About Node JS That You Don't
3 Things Everyone Knows About Node JS That You Don't
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
 
Node.js an Exectutive View
Node.js an Exectutive ViewNode.js an Exectutive View
Node.js an Exectutive View
 
Node.js Course 1 of 2 - Introduction and first steps
Node.js Course 1 of 2 - Introduction and first stepsNode.js Course 1 of 2 - Introduction and first steps
Node.js Course 1 of 2 - Introduction and first steps
 
Node.js Course 2 of 2 - Advanced techniques
Node.js Course 2 of 2 - Advanced techniquesNode.js Course 2 of 2 - Advanced techniques
Node.js Course 2 of 2 - Advanced techniques
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Intro to node and non blocking io
Intro to node and non blocking ioIntro to node and non blocking io
Intro to node and non blocking io
 
Introduction to node js - From "hello world" to deploying on azure
Introduction to node js - From "hello world" to deploying on azureIntroduction to node js - From "hello world" to deploying on azure
Introduction to node js - From "hello world" to deploying on azure
 
JavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
JavaScript as a Server side language (NodeJS): JSConf 2011, DhakaJavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
JavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
 
Treinamento frontend
Treinamento frontendTreinamento frontend
Treinamento frontend
 
Node.js tutoria for beginner
Node.js tutoria for beginnerNode.js tutoria for beginner
Node.js tutoria for beginner
 
Node js for enterprise
Node js for enterpriseNode js for enterprise
Node js for enterprise
 
Server Side Event Driven Programming
Server Side Event Driven ProgrammingServer Side Event Driven Programming
Server Side Event Driven Programming
 
Introduction to node.js aka NodeJS
Introduction to node.js aka NodeJSIntroduction to node.js aka NodeJS
Introduction to node.js aka NodeJS
 
Introduction to node.js by jiban
Introduction to node.js by jibanIntroduction to node.js by jiban
Introduction to node.js by jiban
 
Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js + Expres...
Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js +  Expres...Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js +  Expres...
Node.js Express Tutorial | Node.js Tutorial For Beginners | Node.js + Expres...
 
Nodejs intro
Nodejs introNodejs intro
Nodejs intro
 

Destacado

Destacado (20)

Yahoo! scale Node.js
Yahoo! scale Node.jsYahoo! scale Node.js
Yahoo! scale Node.js
 
North Austin JavaScript User Group Meetup October 2016
North Austin JavaScript User Group Meetup October 2016North Austin JavaScript User Group Meetup October 2016
North Austin JavaScript User Group Meetup October 2016
 
An Introduction to hapi.js
An Introduction to hapi.jsAn Introduction to hapi.js
An Introduction to hapi.js
 
Building an API in Node with HapiJS
Building an API in Node with HapiJSBuilding an API in Node with HapiJS
Building an API in Node with HapiJS
 
Costume mood board
Costume mood boardCostume mood board
Costume mood board
 
PORTFOLIO2016
PORTFOLIO2016PORTFOLIO2016
PORTFOLIO2016
 
practicas de las Tics
practicas de las Ticspracticas de las Tics
practicas de las Tics
 
kk-resume
kk-resumekk-resume
kk-resume
 
Tujuan
TujuanTujuan
Tujuan
 
Eyezek
EyezekEyezek
Eyezek
 
Psychological mood board
Psychological mood boardPsychological mood board
Psychological mood board
 
Diputados impulsan una ley para "Zonas Libres de Fumigación"
Diputados impulsan una ley para "Zonas Libres de Fumigación"Diputados impulsan una ley para "Zonas Libres de Fumigación"
Diputados impulsan una ley para "Zonas Libres de Fumigación"
 
Canal 25-Ayacucho
Canal 25-AyacuchoCanal 25-Ayacucho
Canal 25-Ayacucho
 
Tarea Nº 8 sobre Malformaciones Genéticas de GyC-JL
Tarea Nº 8 sobre Malformaciones Genéticas de GyC-JLTarea Nº 8 sobre Malformaciones Genéticas de GyC-JL
Tarea Nº 8 sobre Malformaciones Genéticas de GyC-JL
 
Reprodução medicamente assistida
Reprodução medicamente assistidaReprodução medicamente assistida
Reprodução medicamente assistida
 
Searching for the framework of my dreams in node.js ecosystem by Mykyta Semen...
Searching for the framework of my dreams in node.js ecosystem by Mykyta Semen...Searching for the framework of my dreams in node.js ecosystem by Mykyta Semen...
Searching for the framework of my dreams in node.js ecosystem by Mykyta Semen...
 
La salle in paksitan ashbsjhjk
La salle in paksitan ashbsjhjkLa salle in paksitan ashbsjhjk
La salle in paksitan ashbsjhjk
 
Ficha técnica Lipofeed NUPROPEC
Ficha técnica Lipofeed NUPROPECFicha técnica Lipofeed NUPROPEC
Ficha técnica Lipofeed NUPROPEC
 
VDSL FOR TRIPLE PLAY
VDSL FOR TRIPLE PLAYVDSL FOR TRIPLE PLAY
VDSL FOR TRIPLE PLAY
 
Node.js Performance Case Study
Node.js Performance Case StudyNode.js Performance Case Study
Node.js Performance Case Study
 

Similar a Nodejs

Similar a Nodejs (20)

An overview of node.js
An overview of node.jsAn overview of node.js
An overview of node.js
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Tech io nodejs_20130531_v0.6
Tech io nodejs_20130531_v0.6Tech io nodejs_20130531_v0.6
Tech io nodejs_20130531_v0.6
 
Beginners Node.js
Beginners Node.jsBeginners Node.js
Beginners Node.js
 
Proposal
ProposalProposal
Proposal
 
Kalp Corporate Node JS Perfect Guide
Kalp Corporate Node JS Perfect GuideKalp Corporate Node JS Perfect Guide
Kalp Corporate Node JS Perfect Guide
 
Node
NodeNode
Node
 
Node js
Node jsNode js
Node js
 
02 Node introduction
02 Node introduction02 Node introduction
02 Node introduction
 
Introduction to node.js By Ahmed Assaf
Introduction to node.js  By Ahmed AssafIntroduction to node.js  By Ahmed Assaf
Introduction to node.js By Ahmed Assaf
 
Introduce about Nodejs - duyetdev.com
Introduce about Nodejs - duyetdev.comIntroduce about Nodejs - duyetdev.com
Introduce about Nodejs - duyetdev.com
 
Nodejs
NodejsNodejs
Nodejs
 
Node js internal
Node js internalNode js internal
Node js internal
 
Nodejs web service for starters
Nodejs web service for startersNodejs web service for starters
Nodejs web service for starters
 
Node.js Presentation
Node.js PresentationNode.js Presentation
Node.js Presentation
 
Ferrara Linux Day 2011
Ferrara Linux Day 2011Ferrara Linux Day 2011
Ferrara Linux Day 2011
 
An introduction to Node.js application development
An introduction to Node.js application developmentAn introduction to Node.js application development
An introduction to Node.js application development
 
Developing realtime apps with Drupal and NodeJS
Developing realtime apps with Drupal and NodeJS Developing realtime apps with Drupal and NodeJS
Developing realtime apps with Drupal and NodeJS
 
Построение простого REST сервера на Node.js | Odessa Frontend Code challenge
Построение простого REST сервера на Node.js | Odessa Frontend Code challengeПостроение простого REST сервера на Node.js | Odessa Frontend Code challenge
Построение простого REST сервера на Node.js | Odessa Frontend Code challenge
 
node.js
node.jsnode.js
node.js
 

Último

%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Último (20)

%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 

Nodejs

  • 2. ● Description ● Introduction ● Some (Confusing) Theory ● 4 Examples ● A couple of weird diagrams ● 2 Pics showing unbelievable benchmarks ● Some stuff from Internet ● And Homer Simpson Agenda
  • 3. Description ● V8 is an open source JavaScript engine developed by Google. Its written in C++ and is used in Google Chrome Browser. ● Node.js runs on V8. ● It was created by Ryan Dahl in 2009. ● Is still in Beta phase. Latest version is 0.6.11 ● Is Open Source. It runs well on Linux systems, can also run on Windows systems. ● If you have worked on EventMachine (Ruby) or Python’s Twisted or Perl’s AnyEvent framework then following presentation is going to be very easy.
  • 4. Introduction ● In simple words Node.js is ‘server-side JavaScript’. ● In not-so-simple words Node.js is a high-performance network applications framework, well optimized for high concurrent environments. ● It’s a command line tool. ● In ‘Node.js’ , ‘.js’ doesn’t mean that its solely written JavaScript. It is 40% JS and 60% C++. ● From the official site: ‘Node's goal is to provide an easy way to build scalable network programs’ - (from nodejs.org!)
  • 5. Introduction: Advanced (& Confusing) ● Node.js uses an event-driven, non-blocking I/O model, which makes it lightweight. (from nodejs.org!) ● It makes use of event-loops via JavaScript’s callback functionality to implement the non-blocking I/O. ● Programs for Node.js are written in JavaScript but not in the same JavaScript we are use to. There is no DOM implementation provided by Node.js, i.e. you can not do this: var element = document.getElementById(“elementId”); ● Everything inside Node.js runs in a single-thread.
  • 6. ● Single Threaded : Node use a single thread to run instead of other server like Apache HTTP who spawn a thread per request, this approach result in avoiding CPU context switching and massive execution stacks in memory. This is also the method used by nginx and other servers developed to counter the C10K problem. ● Event Loop : Written in C++ using the Marc Lehman’s libev library, the event loop use epoll or kqueue for scalable event notification mechanism. ● Non blocking I/O : Node avoid CPU time loss usually made by waiting for an input or an output response (database, file system, web service, ...) thanks to the full-featured asynchronous I/O provided by Marc Lehmann’s libeio library. These characteristics allow Node to handle a large amount of traffic by handling as quickly as possible a request to free the thread for the next one. Node has a built-in support for most important protocols like TCP, DNS, and HTTP (the one that we will focus on). The design goal of a Node application is that any function performing an I/O must use a callback. That’s why there is no blocking methods provided in Node’s API.
  • 7. Example-1: Getting Started & Hello World● Install/build Node.js. ● (Yes! Windows installer is available!) ● Open your favorite editor and start typing JavaScript. ● When you are done, open cmd/terminal and type this: ‘node YOUR_FILE.js’ ● Here is a simple example, which prints ‘hello world’ var sys = require(“sys”); setTimeout(function(){ sys.puts(“world”);},3000); sys.puts(“hello”); //it prints ‘hello’ first and waits for 3 seconds and then prints ‘world’
  • 8. Some Theory: Event-loops & Architecture ● Event-loops are the core of event-driven programming, almost all the UI programs use event-loops to track the user event, for example: Clicks, Ajax Requests etc. Client Event loop (main thread) C++ Threadpool (worker threads) Clients send HTTP requests to Node.js server An Event-loop is woken up by OS, passes request and response objects to the thread-pool Long-running jobs run on worker threads Response is sent back to main thread via callback Event loop returns result to client
  • 9. Some Theory: Non-Blocking I/O ● Traditional I/O var result = db.query(“select x from table_Y”); doSomethingWith(result); //wait for result! doSomethingWithOutResult(); //execution is blocked! ● Non-traditional, Non-blocking I/O db.query(“select x from table_Y”,function (result){ doSomethingWith(result); //wait for result! }); doSomethingWithOutResult(); //executes without any delay!
  • 10. Node.js Server VS Multi Threaded Server
  • 11. What can you do with Node.js ? ● You can create an HTTP server and print ‘hello world’ on the browser in just 4 lines of JavaScript. (Example included) ● You can create a TCP server similar to HTTP server, in just 4 lines of JavaScript. (Example included) ● You can create a DNS server. ● You can create a Static File Server. ● You can create a Web Chat Application like GTalk in the browser. ● Node.js can also be used for creating online games, collaboration tools or anything which sends updates to the user in real-time.
  • 12. Example -2 &3 (HTTP Server & TCP Server) ● Following code creates an HTTP Server and prints ‘Hello World’ on the browser: // Load the http module to create an http server. var http = require('http'); // Configure our HTTP server to respond with Hello World to all requests. http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Worldn'); }); // Listen on port 5000, IP defaults to 127.0.0.1 server.listen(5000, "127.0.0.1"); How to Run A Http Example: CMD ->Node Filename.js o/p-> Open Browser and type url http://hostname:Portnumber For This Example http://127.0.0.1:5000
  • 13. ●Here is an example of a simple TCP server which listens on port 6000 and echoes whatever you send it: // Load the http module to create an tcp server. var net = require('net'); // Configure our TCP server to respond with Echo Sever to all requests. net.createServer(function (socket) { socket.write("Echo serverrn"); socket.pipe(socket); }); // Listen on port 6000, IP defaults to 127.0.0.1 net.listen(6000, "127.0.0.1"); How to Run A Tcp Example: CMD ->Node Filename.js o/p-> Open Browser and type url like -- http://hostname:Portnumber http://127.0.0.1:5000
  • 14. Node.js Ecosystem ● Node.js heavily relies on modules, in previous examples require keyword loaded the http & net modules. ● Creating a module is easy, just put your JavaScript code in a separate js file and include it in your code by using keyword require, like: var modulex = require(‘./modulex’); ● Libraries in Node.js are called packages and they can be installed by typing npm install “package_name”; //package should be available in npm registry @ nmpjs.org ● NPM (Node Package Manager) comes bundled with Node.js installation.
  • 15. Example-4: Lets connect to a DB (MongoDB) ● Install mongojs using npm, a mongoDB driver for Node.js npm install mongojs ● Code to retrieve all the documents from a collection: var db = require("mongojs") .connect("localhost:27017/test", ['test']); db.test.find({}, function(err, posts) { if( err || !posts) console.log("No posts found"); else posts.forEach( function(post) { console.log(post); }); });
  • 16. When to use Node.js? ● Node.js is good for creating streaming based real-time services, web chat applications, static file servers etc. ● If you need high level concurrency and not worried about CPU-cycles. ● If you are great at writing JavaScript code because then you can use the same language at both the places: server-side and client-side. ● More can be found at: http://stackoverflow.com/questions/5062614/how- to-decide-when-to-use-nodejs
  • 17. Some Node.js benchmarksTaken from: http://code.google.com/p/node-js-vs- apache-php-benchmark/wiki/Tests A benchmark between Apache+PHP and node.js, shows the response time for 1000 concurrent connections making 10,000 requests each, for 5 tests. Taken from: http://nodejs.org/jsconf2010.pdf The benchmark shows the response time in milli-secs for 4 evented servers.
  • 18. When to not use Node.js ● When you are doing heavy and CPU intensive calculations on server side, because event-loops are CPU hungry. ● Node.js API is still in beta, it keeps on changing a lot from one revision to another and there is a very little backward compatibility. Most of the packages are also unstable. Therefore is not yet production ready. ● Node.js is a no match for enterprise level application frameworks like Spring(java), Django(python), Symfony(php) etc. Applications written on such platforms are meant to be highly user interactive and involve complex business logic. ● Read further on disadvantages of Node.js on Quora: http://www.quora.com/What-are-the-disadvantages-of-using-Node-js
  • 19. Appendix-1: Who is using Node.js in production? ● Yahoo! : iPad App Livestand uses Yahoo! Manhattan framework which is based on Node.js. ● LinkedIn : LinkedIn uses a combination of Node.js and MongoDB for its mobile platform. iOS and Android apps are based on it. ● eBay : Uses Node.js along with ql.io to help application developers in improving eBay’s end user experience. ● Dow Jones : The WSJ Social front-end is written completely in Node.js, using Express.js, and many other modules. ● Complete list can be found at: https://github.com/joyent/node/wiki/Projects,-Applications,-and- Companies-Using-Node
  • 20. Appendix-2: Resource to get started ● Watch this video at Youtube: http://www.youtube.com/watch?v=jo_B4LTHi3I ● Read the free O’reilly Book ‘Up and Running with Node.js’ @ http://ofps.oreilly.com/titles/9781449398583/ ● Visit www.nodejs.org for Info/News about Node.js ● Watch Node.js tutorials @ http://nodetuts.com/ ● For Info on MongoDB: http://www.mongodb.org/display/DOCS/Home ● For anything else Google!
  • 21. Appendix-3: Some Good Modules ● Express – to make things simpler e.g. syntax, DB connections. ● Jade – HTML template system ● Socket.IO – to create real-time apps ● Nodemon – to monitor Node.js and push change automatically ● CoffeeScript – for easier JavaScript development ● Find out more about some widely used Node.js modules at: http://blog.nodejitsu.com/top-node-module-creators