Node.jsShael Joon & Matt Simonis
Background• Server Side JavaScript• Developed by Ryan Dhal (2009)• Currently owned by Joyent• Based off Google’s V8 JavaSc...
It’s Asynchronous•   Non-blocking due to system event notifications•   Not having to deal with common multithreading    pro...
Usage domain areas/usersMicrosoftNode gives Azure users the first end-to-end JavaScript experience for thedevelopment of a...
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 co...
Modules• Modules are plugins/add-ons/extensions for  Node to help with development process.• Often code examples are inclu...
3000+ modules in the areas below• Web frameworks                • Templating                            • Parsers      • R...
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...
Benchmarks [2]
BenchmarksAnalysis• Conducted by 3rd party• Comparing Node against Apache + PHP is  an unfair experiment but is a realisti...
Benchmarks[5]
BenchmarksAnalysis• Conducted by 3rd party• Heavier work loads being tested – DB  access was involved.• Run on a single ma...
Benchmarks [3]Analysis• Conducted by 3rd party• Simple random number generation / return  test.• Missing physical hardware...
Benchmarks – Final thoughts• Node is worth investigating as it shows  rapid growth in 3 years of existence.• Needs higher ...
Usage [4]
Chat server – client may connect via telnet [4]
SourcesWeb Posts:[1] Ostinelli , Roberto. "A comparison between Misultin, Mochiweb, Cowboy, NodeJS andTornadoweb."www.osti...
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                                   ...
Modules Used
Modules Used• Express• bcrypt• mongoose• Socket.io• child_process
Expressvar app = express.createServer();app.get(/, function(req, res){    res.send(Hello World);});app.listen(3000);
Express & RESTapp.get(/user/playlist, function(req, res) {    if (req.session.user) {        Playlist.findOne({userid: req...
Express & RESTapp.post(/register, function(req, res) {    var newUser = new User();      newUser.username = req.body.usern...
Mongoosevar UserSchema = new Schema({    username: {        type: String,        index: { unique: true }    },    password...
socket.iosocket.on(disconnect, function() {    if (socket.handshake.session.user) {         var user =socket.handshake.ses...
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-en...
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
ContactShael Joon                                              Matt SimonisRochester Institute of Technology   Rochester I...
Node.js
Upcoming SlideShare
Loading in...5
×

Node.js

3,127

Published on

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total Views
3,127
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
38
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

Node.js

  1. 1. Node.jsShael Joon & Matt Simonis
  2. 2. 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
  3. 3. 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
  4. 4. Usage domain areas/usersMicrosoftNode gives Azure users the first end-to-end JavaScript experience for thedevelopment of a whole new class of real-time applications.eBayNode’s evented I/O model freed us from worrying about locking andconcurrency issues that are common with multithreaded async I/O.LinkedinOn 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.YahooNode.js is the execution core of Manhattan. Allowing developers to build onecode base using one language – that is the nirvana for developers. http://nodejs.org/
  5. 5. Google Trends – “node.js” http://www.google.com/trends/?q=node.js
  6. 6. 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.
  7. 7. 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.
  8. 8. 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
  9. 9. Benchmarks [1]
  10. 10. Benchmarks [1]
  11. 11. Benchmarks [1]
  12. 12. Benchmarks [1]
  13. 13. 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.
  14. 14. Benchmarks [2]
  15. 15. BenchmarksAnalysis• 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.
  16. 16. Benchmarks[5]
  17. 17. BenchmarksAnalysis• Conducted by 3rd party• Heavier work loads being tested – DB access was involved.• Run on a single machine and was not distributed.
  18. 18. Benchmarks [3]Analysis• Conducted by 3rd party• Simple random number generation / return test.• Missing physical hardware set information.
  19. 19. 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.
  20. 20. Usage [4]
  21. 21. Chat server – client may connect via telnet [4]
  22. 22. SourcesWeb Posts:[1] Ostinelli , Roberto. "A comparison between Misultin, Mochiweb, Cowboy, NodeJS andTornadoweb."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. 19Mar 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 Mar2012. <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," InternetComputing, IEEE , vol.14, no.6, pp.80-83, Nov.-Dec. 2010doi: 10.1109/MIC.2010.145URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5617064&isnumber=5617049
  23. 23. Why Node.js?
  24. 24. Why Node.js?• Fast and scalable• Transferrable knowledge
  25. 25. Why Node.js?• Fast and scalable• Transferrable knowledge• Event driven with non-blocking I/O
  26. 26. Why Node.js?• Fast and scalable• Transferrable knowledge• Event driven with non-blocking I/O• Hundreds of modules
  27. 27. Modules
  28. 28. Modules Socket.io http ejs JadeExpress node-crypto node-imap mongoose node-ftp node.bcrypt.js
  29. 29. Modules Used
  30. 30. Modules Used• Express• bcrypt• mongoose• Socket.io• child_process
  31. 31. Expressvar app = express.createServer();app.get(/, function(req, res){ res.send(Hello World);});app.listen(3000);
  32. 32. Express & RESTapp.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); }});
  33. 33. Express & RESTapp.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); } });});
  34. 34. Mongoosevar 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);
  35. 35. socket.iosocket.on(disconnect, function() { if (socket.handshake.session.user) { var user =socket.handshake.session.user.username; io.sockets.in(user).emit(exit, { user:user }); }});
  36. 36. YouTube API
  37. 37. YouTube API• Very well documented• Tons of information available from player• Easy to integrate
  38. 38. Problems
  39. 39. Problems• mongoose schemas• Socket.io access to sessions• Handling groups of sockets• Passing server-side data to front-end• YouTube API and HTML5
  40. 40. What I Learned
  41. 41. What I Learned• Easy to get an app up and running• MongoDB is incredibly simple• YouTube API is great to work with
  42. 42. ContactShael Joon Matt SimonisRochester Institute of Technology Rochester Institute of Technologywebsite: www.shaeljoon.com website: www.mattsimonis.comemail: shaeljoon@gmail.com email: matts12290@gmail.com twitter: @mattsimonis
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×