Date post: | 10-May-2015 |
Category: |
Technology |
Upload: | martin-naumann |
View: | 1,619 times |
Download: | 1 times |
Node.js and meteorNext generation web development for the realtime web
Martin Naumann - Software EngineerCentralway Factory AGSubmission #386
AGENDA
● What is node.js?● Why do you want it?● Comparison● Quick: express.js ● Even quicker: meteor.js● Meteor.js example● To node or not to node● Alternatives
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
What is node.js?
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
● Javascript on the server● event-driven architecture● asynchronous I/O● scalable● based on V8● modular
"Yeah. Nice buzzwords. What's the point?"
Why you want node.js?
● One instance can handle lots of clients○ reduced memory footprint○ get more performance from existing resources○ Benchmark: up to 1.600.000 concurrent requests
● Use your frontend technology on the backend○ you have Javascript in your application anyway○ "Oh look, this looks familiar!"○ You know your stuff: Callbacks, Closures, Asynchronity
● It's modular○ easy to connect pieces of code○ easy to write network code○ rapidly build complex applications
Level Two
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
Comparison: "Elders of web dev" vs. node.js
● HTTP is the base of all web applications● HTTP was synchronous.● Most of the web languages still are.● HTTP evolved:
○ AJAX○ Websockets○ Push
● real-time web● Need for asynchronous technologies
○ all of which are a bit weird in PHP, Java, ASP, etc.○ node.js is asynchronous and has ever been.
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
Quick! To the web app - with express
var express = require("express");var app = express.createServer();
app.get('/:msg', function(req, res) { res.send(req.params.msg);});
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
What boilerplate code is left?
● Setup the server● Route requests● Take care of HTTP● Data sychronisation● Persist data● Write an Interface (API)● Setup server-side and client-side code
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
Why not have...
● the code separated by conventions● the server automatically deliver it● automatic persistance● automatic synchronisation● automatically compensate latency
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
Quicker: meteor.js - A real-time app example
"So I heard you wanted to implement a chat app"● Write a server and a client● transmitting messages in nearly real-time● with multiple chatrooms● users can pick a nickname● users can create rooms● What do you think how many lines of code this requires?
54.Server and client together.7 are blank.
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
Meteor.js example: The server
var Rooms = new Meteor.Collection("rooms");var Messages = new Meteor.Collection("messages");
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
Yup. That's it.
Meteor.js example: The client I / II
Template.main.currentRoom = function (){return Session.get("room") || false;
};
Template.rooms.availableRooms = function (){return Rooms.find({});
};
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
Meteor.js example: The client II / II
Template.room.events = { "click #leave": function() { if(!window.confirm("Leave this room", "Really leave?")) return; Session.set("room", undefined); }, "submit": function() { Messages.insert({ "room": Session.get("room"), "author": Session.get("name"), "text": $("#msg").val() }); $("#msg").val(""); }};
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
To node or not to node - that shall be the question
● Where node does make sense○ real-time applications○ processing long-running or I/O intensive tasks
● Where it doesn't make sense○ static web pages○ small web applications for standard CRUD
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
Alternatives
● Ruby: EventMachine● Python: Twisted● PHP: Photon● Java: javaeventing● Perl: Mojo
JAZOON’12: Rookie Award, Next generation web development, Martin Naumann
Martin Naumann - www.geekonaut.deCentralway Factory AG - [email protected]@AVGP - github.com/AVGP
Thanks for listening!Questions?