SlideShare a Scribd company logo
Node.js
Node.js
Shael Joon & Matt Simonis
Background
• Server Side JavaScript
• Developed by Ryan Dhal (2009)
• Currently owned by Joyent
• Based off Google’s V8 JavaScript Engine
  (which is written in C and C++)
• Open Source
It’s Asynchronous
•   Non-blocking due to system event notifications
•   Not having to deal with common multithreading
    problems such as deadlocks, resource sharing
    and etc. (See [6] for more details)
•   Scalability (930k[tested] to 1500k[claimed]
    connections) [4]
•   Most of the server and client side work can be
    done in JavaScript
Usage domain areas/users
Microsoft
Node gives Azure users the first end-to-end JavaScript experience for the
development of a whole new class of real-time applications.

eBay
Node’s evented I/O model freed us from worrying about locking and
concurrency issues that are common with multithreaded async I/O.

Linkedin
On the server side, our entire mobile software stack is completely built in Node.
One reason was scale. The second is Node showed us huge performance gains.

Yahoo
Node.js is the execution core of Manhattan. Allowing developers to build one
code base using one language – that is the nirvana for developers.

                                                                            http://nodejs.org/
Google Trends – “node.js”




                 http://www.google.com/trends/?q=node.js
Ample Resources
• Free e-Books
• Code Samples including 3rd party sources
• Modules usage guides/samples
• Benchmarking and comparisons to other
  technologies
• However, it is missing scholarly papers and
  research.
Modules
• Modules are plugins/add-ons/extensions for
  Node to help with development process.
• Often code examples are included
  alongside the module.
• Several categories of modules.
• Modules are plugins/add-ons/extensions for
  Node to help with development process.
3000+ modules in the areas below
• Web frameworks                • Templating                            • Parsers
      • Routers                 • CSS Engines                                  • JSON
      • Static file servers      • Content Management Systems                   • XML
      • Microframeworks         • Build and Deployment                         • Command Line Option
      • Frameworks              • Package Management Systems                     Parsers
      • Middleware              • Module Loader                                • Parser Generators
           • JSGI               • OpenSSL / Crypto / Hashing                   • Other Parsers
           • Connect            • SMTP                                  • Debugging / Console Utilities
           • Other middleware   • TCP / IP                              • Compression
      • Other                          • Multiple protocols             • Graphics
• Database                             • HTTP                           • Sound
      • MS SQL Server                  • FTP                            • Payment Gateways
      • PostgreSQL                     • E-mail                         • API clients
      • MySQL                          • XMPP                           • Control flow / Async goodies
      • SQLite                         • Other networking               • I18n and L10n modules
      • Oracle                  • RPC                                   • Boilerplates
      • NoSQL and Key/Value     • Web Sockets & Ajax                    • Continuous Integration Tools
           • Mongo              • Message Queues                        • DDD, CQRS, EventSourcing
           • Hive               • Class systems                         • Desktop application related
           • Redis              • Testing / Spec Frameworks             • JavaScript threads
           • CouchDB            • Wrappers                              • Other
                                                               https://github.com/joyent/node/wiki/modules
Benchmarks [1]
Benchmarks [1]
Benchmarks [1]
Benchmarks [1]
Benchmarks [1 , 4 ]
• Analysis
  • Conducted by the owner of Erwin
  • Comparison of all event based languages
  • Tested on a single core

• Recognized by Tom Hughes-Croucher (representing Node)
  • Node is fairly new and yet it can compete with other mature technologies
  • Performance is not everything. Other factors (Usability, stability, etc)
     should be considered as well.
  • THEY ARE ALL AVERAGES BEING PLOTTED. Concern about exceptional
     cases (unusually long calls) may bring down the overall performance down.
Benchmarks [2]
Benchmarks
Analysis
• Conducted by 3rd party
• Comparing Node against Apache + PHP is
  an unfair experiment but is a realistic case.
• Benchmarking tool was sharing resources
  while the tests were run.
Benchmarks[5]
Benchmarks
Analysis
• Conducted by 3rd party
• Heavier work loads being tested – DB
  access was involved.
• Run on a single machine and was not
  distributed.
Benchmarks [3]

Analysis
• Conducted by 3rd party
• Simple random number generation / return
  test.
• Missing physical hardware set information.
Benchmarks – Final thoughts

• Node is worth investigating as it shows
  rapid growth in 3 years of existence.
• Needs higher quality benchmarking tests
  conducted in real life scenarios.
• Scholarly research is still scarce.
• Recommended domain areas – scalable
  web services, non critical software.
Usage [4]
Chat server – client may
 connect via telnet [4]
Sources
Web Posts:
[1] Ostinelli , Roberto. "A comparison between Misultin, Mochiweb, Cowboy, NodeJS and
Tornadoweb."www.ostinelli.net. Oostinelli, May 2011. Web. 19 Mar 2012. <http://www.ostinelli.net/a-comparison-
between-misultin-mochiweb-cowboy-nodejs-and-tornadoweb/>.
[2] Zgadzaj, Maciej. "Benchmarking Node.js - basic performance tests against Apache PHP."http://zgadzaj.com. N.p.,
August 19, 2010. Web. 19 Mar 2012. <http://zgadzaj.com/benchmarking-nodejs-basic-performance-tests-against-
apache-php>.
 [3] B, K. "Benchmarking nodejs : comparing nodejs and tomcat - random generator." http://fl-ex.blogspot.com. N.p.,
13 December 2011. Web. 19 Mar 2012. <http://fl-ex.blogspot.com/2011/12/comparing-random-generator-nodejs-
and.html>.
  [4] Hughes-Croucher, Tom, dir. Tech Talk: Tom Hughes-Croucher (Joyent) — “Node.js at Scale”. Joyent, 2011. Web. 19
Mar 2012. <http://sna-projects.com/blog/2011/08/nodejs/>. <http://sna-projects.com/blog/2011/08/nodejs/>.
[5] SUBBU, ALLAMARAJU. "Nodejs vs Play for Front-End Apps." subbu.org. N.p., MARCH 26, 2011. Web. 19 Mar
2012. <http://www.subbu.org/blog/2011/03/nodejs-vs-play-for-front-end-apps>.
IEEE Paper:
[6] Tilkov, S.;Vinoski, S.; , "Node.js: Using JavaScript to Build High-Performance Network Programs," Internet
Computing, IEEE , vol.14, no.6, pp.80-83, Nov.-Dec. 2010
doi: 10.1109/MIC.2010.145
URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5617064&isnumber=5617049
Why Node.js?
Why Node.js?

• Fast and scalable
• Transferrable knowledge
Why Node.js?

• Fast and scalable
• Transferrable knowledge
• Event driven with non-blocking I/O
Why Node.js?

• Fast and scalable
• Transferrable knowledge
• Event driven with non-blocking I/O
• Hundreds of modules
Modules
Modules
                        Socket.io
    http
                                    ejs
                                              Jade
Express       node-crypto

                                node-imap
   mongoose
                                          node-ftp
              node.bcrypt.js
Modules Used
Modules Used

• Express
• bcrypt
• mongoose
• Socket.io
• child_process
Express
var app = express.createServer();

app.get('/', function(req, res){
    res.send('Hello World');
});

app.listen(3000);
Express & REST
app.get('/user/playlist', function(req, res) {
    if (req.session.user) {
        Playlist.findOne({userid: req.session.user._id},
function(err, playlist) {
             if (playlist) {
                 res.json(playlist.songs);
             } else {
                 res.redirect('/404');
             }
        });
    } else {
        res.redirect('/404');
    }
});
Express & REST
app.post('/register', function(req, res) {
    var newUser = new User();

      newUser.username = req.body.username;
      newUser.password = req.body.password;
      newUser.display_name = req.body.displayname;
      newUser.date_created = new Date();

      newUser.save(function(err) {
          if (err) {
              res.redirect('error');
          } else {
              res.redirect('home');
          }
      });
});
Mongoose
var UserSchema = new Schema({
    username: {
        type: String,
        index: { unique: true }
    },
    password: String,
    salt: String,
    display_name: String
    date_created: Date
});

var User = mongoose.model('User', UserSchema);
socket.io

socket.on('disconnect', function() {
    if (socket.handshake.session.user) {
         var user =
socket.handshake.session.user.username;
         io.sockets.in(user).emit('exit', { user:
user });
    }
});
YouTube API
YouTube API

• Very well documented
• Tons of information available from player
• Easy to integrate
Problems
Problems

• mongoose schemas
• Socket.io access to sessions
• Handling groups of sockets
• Passing server-side data to front-end
• YouTube API and HTML5
What I Learned
What I Learned

• Easy to get an app up and running
• MongoDB is incredibly simple
• YouTube API is great to work with
Contact
Shael Joon                                              Matt Simonis

Rochester Institute of Technology   Rochester Institute of Technology

website: www.shaeljoon.com            website: www.mattsimonis.com

email: shaeljoon@gmail.com             email: matts12290@gmail.com

                                              twitter: @mattsimonis

More Related Content

PDF
PyCon 2011 Scaling Disqus
PDF
Xitrum HOWTOs
PDF
Scala Frameworks for Web Application 2016
PPTX
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
PPT
01 java intro
PDF
[2015/2016] Backbone JS
PDF
Java for XPages Development
PDF
From Java to Ruby...and Back
PyCon 2011 Scaling Disqus
Xitrum HOWTOs
Scala Frameworks for Web Application 2016
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
01 java intro
[2015/2016] Backbone JS
Java for XPages Development
From Java to Ruby...and Back

What's hot (20)

PPTX
Node.js Development with Apache NetBeans
PPTX
Overview of PaaS: Java experience
PPTX
Introducing CrossWorlds for IBM Domino
PDF
JavaScript Libraries (Ajax Exp 2006)
PDF
Migrate all the things!
PPTX
Melbourne User Group OAK and MongoDB
PDF
Angular - Chapter 7 - HTTP Services
PPTX
[DanNotes] XPages - Beyound the Basics
PPTX
Utilizing the OpenNTF Domino API
PDF
Apache Cordova 4.x
PPTX
OpenNTF Domino API - Overview Introduction
PDF
Mobile developement
PDF
Eureka Moment UKLUG
PPTX
Why jakarta ee matters (ConFoo 2021)
PDF
Backbone JS for mobile apps
PDF
Grand Central Dispatch and multi-threading [iCONdev 2014]
PPTX
Working with GIT
PPT
Building intranet applications with ASP.NET AJAX and jQuery
PPTX
Webservices
PDF
Building Real-World Dojo Web Applications
Node.js Development with Apache NetBeans
Overview of PaaS: Java experience
Introducing CrossWorlds for IBM Domino
JavaScript Libraries (Ajax Exp 2006)
Migrate all the things!
Melbourne User Group OAK and MongoDB
Angular - Chapter 7 - HTTP Services
[DanNotes] XPages - Beyound the Basics
Utilizing the OpenNTF Domino API
Apache Cordova 4.x
OpenNTF Domino API - Overview Introduction
Mobile developement
Eureka Moment UKLUG
Why jakarta ee matters (ConFoo 2021)
Backbone JS for mobile apps
Grand Central Dispatch and multi-threading [iCONdev 2014]
Working with GIT
Building intranet applications with ASP.NET AJAX and jQuery
Webservices
Building Real-World Dojo Web Applications
Ad

Similar to Node.js (20)

PPTX
After the LAMP, it's time to get MEAN
PPT
Introduction to node.js aka NodeJS
PPT
Introducción y comandos en NodeJS slodte
PPTX
.Net Microservices with Event Sourcing, CQRS, Docker and... Windows Server 20...
KEY
20120306 dublin js
PPTX
Be faster then rabbits
PDF
Surrogate dependencies (in node js) v1.0
PPTX
Webdevcon Keynote hh-2012-09-18
PPTX
Node.js: The What, The How and The When
PPT
David buksbaum a-briefintroductiontocsharp
PDF
Web Development using Ruby on Rails
ODP
Node.js architecture (EN)
PPTX
Beginners Node.js
PDF
SGCE 2015 REST APIs
PDF
APIs distribuidos con alta escalabilidad
PDF
End-to-end W3C APIs - tpac 2012
PPTX
Intro to node and mongodb 1
KEY
Google App Engine Java, Groovy and Gaelyk
PPTX
Node.js Dublin Meetup April 2014
PPT
18_Node.js.ppt
After the LAMP, it's time to get MEAN
Introduction to node.js aka NodeJS
Introducción y comandos en NodeJS slodte
.Net Microservices with Event Sourcing, CQRS, Docker and... Windows Server 20...
20120306 dublin js
Be faster then rabbits
Surrogate dependencies (in node js) v1.0
Webdevcon Keynote hh-2012-09-18
Node.js: The What, The How and The When
David buksbaum a-briefintroductiontocsharp
Web Development using Ruby on Rails
Node.js architecture (EN)
Beginners Node.js
SGCE 2015 REST APIs
APIs distribuidos con alta escalabilidad
End-to-end W3C APIs - tpac 2012
Intro to node and mongodb 1
Google App Engine Java, Groovy and Gaelyk
Node.js Dublin Meetup April 2014
18_Node.js.ppt
Ad

Recently uploaded (20)

PPTX
Cloud computing and distributed systems.
PDF
Encapsulation theory and applications.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPT
Teaching material agriculture food technology
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Big Data Technologies - Introduction.pptx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Approach and Philosophy of On baking technology
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Cloud computing and distributed systems.
Encapsulation theory and applications.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
MYSQL Presentation for SQL database connectivity
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Digital-Transformation-Roadmap-for-Companies.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Teaching material agriculture food technology
Advanced methodologies resolving dimensionality complications for autism neur...
Big Data Technologies - Introduction.pptx
Chapter 3 Spatial Domain Image Processing.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Encapsulation_ Review paper, used for researhc scholars
Spectral efficient network and resource selection model in 5G networks
Approach and Philosophy of On baking technology
Reach Out and Touch Someone: Haptics and Empathic Computing
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
NewMind AI Monthly Chronicles - July 2025
CIFDAQ's Market Insight: SEC Turns Pro Crypto

Node.js

  • 2. Node.js Shael Joon & Matt Simonis
  • 3. Background • Server Side JavaScript • Developed by Ryan Dhal (2009) • Currently owned by Joyent • Based off Google’s V8 JavaScript Engine (which is written in C and C++) • Open Source
  • 4. It’s Asynchronous • Non-blocking due to system event notifications • Not having to deal with common multithreading problems such as deadlocks, resource sharing and etc. (See [6] for more details) • Scalability (930k[tested] to 1500k[claimed] connections) [4] • Most of the server and client side work can be done in JavaScript
  • 5. Usage domain areas/users Microsoft Node gives Azure users the first end-to-end JavaScript experience for the development of a whole new class of real-time applications. eBay Node’s evented I/O model freed us from worrying about locking and concurrency issues that are common with multithreaded async I/O. Linkedin On the server side, our entire mobile software stack is completely built in Node. One reason was scale. The second is Node showed us huge performance gains. Yahoo Node.js is the execution core of Manhattan. Allowing developers to build one code base using one language – that is the nirvana for developers. http://nodejs.org/
  • 6. Google Trends – “node.js” http://www.google.com/trends/?q=node.js
  • 7. Ample Resources • Free e-Books • Code Samples including 3rd party sources • Modules usage guides/samples • Benchmarking and comparisons to other technologies • However, it is missing scholarly papers and research.
  • 8. Modules • Modules are plugins/add-ons/extensions for Node to help with development process. • Often code examples are included alongside the module. • Several categories of modules. • Modules are plugins/add-ons/extensions for Node to help with development process.
  • 9. 3000+ modules in the areas below • Web frameworks • Templating • Parsers • Routers • CSS Engines • JSON • Static file servers • Content Management Systems • XML • Microframeworks • Build and Deployment • Command Line Option • Frameworks • Package Management Systems Parsers • Middleware • Module Loader • Parser Generators • JSGI • OpenSSL / Crypto / Hashing • Other Parsers • Connect • SMTP • Debugging / Console Utilities • Other middleware • TCP / IP • Compression • Other • Multiple protocols • Graphics • Database • HTTP • Sound • MS SQL Server • FTP • Payment Gateways • PostgreSQL • E-mail • API clients • MySQL • XMPP • Control flow / Async goodies • SQLite • Other networking • I18n and L10n modules • Oracle • RPC • Boilerplates • NoSQL and Key/Value • Web Sockets & Ajax • Continuous Integration Tools • Mongo • Message Queues • DDD, CQRS, EventSourcing • Hive • Class systems • Desktop application related • Redis • Testing / Spec Frameworks • JavaScript threads • CouchDB • Wrappers • Other https://github.com/joyent/node/wiki/modules
  • 14. Benchmarks [1 , 4 ] • Analysis • Conducted by the owner of Erwin • Comparison of all event based languages • Tested on a single core • Recognized by Tom Hughes-Croucher (representing Node) • Node is fairly new and yet it can compete with other mature technologies • Performance is not everything. Other factors (Usability, stability, etc) should be considered as well. • THEY ARE ALL AVERAGES BEING PLOTTED. Concern about exceptional cases (unusually long calls) may bring down the overall performance down.
  • 16. Benchmarks Analysis • Conducted by 3rd party • Comparing Node against Apache + PHP is an unfair experiment but is a realistic case. • Benchmarking tool was sharing resources while the tests were run.
  • 18. Benchmarks Analysis • Conducted by 3rd party • Heavier work loads being tested – DB access was involved. • Run on a single machine and was not distributed.
  • 19. Benchmarks [3] Analysis • Conducted by 3rd party • Simple random number generation / return test. • Missing physical hardware set information.
  • 20. Benchmarks – Final thoughts • Node is worth investigating as it shows rapid growth in 3 years of existence. • Needs higher quality benchmarking tests conducted in real life scenarios. • Scholarly research is still scarce. • Recommended domain areas – scalable web services, non critical software.
  • 22. Chat server – client may connect via telnet [4]
  • 23. Sources Web Posts: [1] Ostinelli , Roberto. "A comparison between Misultin, Mochiweb, Cowboy, NodeJS and Tornadoweb."www.ostinelli.net. Oostinelli, May 2011. Web. 19 Mar 2012. <http://www.ostinelli.net/a-comparison- between-misultin-mochiweb-cowboy-nodejs-and-tornadoweb/>. [2] Zgadzaj, Maciej. "Benchmarking Node.js - basic performance tests against Apache PHP."http://zgadzaj.com. N.p., August 19, 2010. Web. 19 Mar 2012. <http://zgadzaj.com/benchmarking-nodejs-basic-performance-tests-against- apache-php>.  [3] B, K. "Benchmarking nodejs : comparing nodejs and tomcat - random generator." http://fl-ex.blogspot.com. N.p., 13 December 2011. Web. 19 Mar 2012. <http://fl-ex.blogspot.com/2011/12/comparing-random-generator-nodejs- and.html>.   [4] Hughes-Croucher, Tom, dir. Tech Talk: Tom Hughes-Croucher (Joyent) — “Node.js at Scale”. Joyent, 2011. Web. 19 Mar 2012. <http://sna-projects.com/blog/2011/08/nodejs/>. <http://sna-projects.com/blog/2011/08/nodejs/>. [5] SUBBU, ALLAMARAJU. "Nodejs vs Play for Front-End Apps." subbu.org. N.p., MARCH 26, 2011. Web. 19 Mar 2012. <http://www.subbu.org/blog/2011/03/nodejs-vs-play-for-front-end-apps>. IEEE Paper: [6] Tilkov, S.;Vinoski, S.; , "Node.js: Using JavaScript to Build High-Performance Network Programs," Internet Computing, IEEE , vol.14, no.6, pp.80-83, Nov.-Dec. 2010 doi: 10.1109/MIC.2010.145 URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5617064&isnumber=5617049
  • 25. Why Node.js? • Fast and scalable • Transferrable knowledge
  • 26. Why Node.js? • Fast and scalable • Transferrable knowledge • Event driven with non-blocking I/O
  • 27. Why Node.js? • Fast and scalable • Transferrable knowledge • Event driven with non-blocking I/O • Hundreds of modules
  • 29. Modules Socket.io http ejs Jade Express node-crypto node-imap mongoose node-ftp node.bcrypt.js
  • 31. Modules Used • Express • bcrypt • mongoose • Socket.io • child_process
  • 32. Express var app = express.createServer(); app.get('/', function(req, res){ res.send('Hello World'); }); app.listen(3000);
  • 33. Express & REST app.get('/user/playlist', function(req, res) { if (req.session.user) { Playlist.findOne({userid: req.session.user._id}, function(err, playlist) { if (playlist) { res.json(playlist.songs); } else { res.redirect('/404'); } }); } else { res.redirect('/404'); } });
  • 34. Express & REST app.post('/register', function(req, res) { var newUser = new User(); newUser.username = req.body.username; newUser.password = req.body.password; newUser.display_name = req.body.displayname; newUser.date_created = new Date(); newUser.save(function(err) { if (err) { res.redirect('error'); } else { res.redirect('home'); } }); });
  • 35. Mongoose var UserSchema = new Schema({ username: { type: String, index: { unique: true } }, password: String, salt: String, display_name: String date_created: Date }); var User = mongoose.model('User', UserSchema);
  • 36. socket.io socket.on('disconnect', function() { if (socket.handshake.session.user) { var user = socket.handshake.session.user.username; io.sockets.in(user).emit('exit', { user: user }); } });
  • 38. YouTube API • Very well documented • Tons of information available from player • Easy to integrate
  • 40. Problems • mongoose schemas • Socket.io access to sessions • Handling groups of sockets • Passing server-side data to front-end • YouTube API and HTML5
  • 42. What I Learned • Easy to get an app up and running • MongoDB is incredibly simple • YouTube API is great to work with
  • 43. Contact Shael Joon Matt Simonis Rochester Institute of Technology Rochester Institute of Technology website: www.shaeljoon.com website: www.mattsimonis.com email: shaeljoon@gmail.com email: matts12290@gmail.com twitter: @mattsimonis