intro to node

Post on 17-May-2015

8.968 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Node.JS is a popular server-side JavaScript framework for handling real-time and distributed data processing. In this session you'll learn what Node.JS is, how it works under the hood, and what scenarios it's useful for. You'll also learn how to deploy it to Windows Azure and manage it inside of IIS 7.

TRANSCRIPT

Intro to Node.JS

By Aaron StannardStartup Developer Evangelist, Microsoft Corporation

Examples from Today’s Talk

https://github.com/Aaronontheweb/introtonode

Meet Node

var http = require('http');

//Node function called each time a new HTTP request arrivesfunction onRequest(req, res){ res.writeHead(200, {'Content-Type':'text/plain'}); res.end('Hello ' + req.connection.remoteAddress + '!'); /* Write the IP addresses of our connecting client to console */ console.log('Incoming connection from ' + req.connection.remoteAddress);}

//Listen for connections on the port provided by the host processvar server = http.createServer(onRequest).listen(process.env.PORT);

What Is Node?

• Server Side JavaScript• Asynchronous Web Framework• Evented I/O Model

What Is Node?

Network I/O Libraries

+

+

=

What Makes Node Special?

• Uses the familiar JavaScript programming model to enable server-side development

• Buries the pain of working with async / parallel programming

• No Blocking I/O• Can handle large concurrent loads more easily

than other technologies• Not a silver bullet

Why Node

JavaScript is ubiquitous

Why Node

Traditional Platforms• Things you need for

concurrent web programming:– Locks– Threads / Thread Pools– Thread Management– Inter-Thread Communication– Callbacks + Enclosures + Sync

to Blocking Calls

Node• Things you need for

concurrent web programming:– Callbacks + Enclosures

Which looks simpler?

Good Node Scenarios

Behavior• High request volume, low

response-sizes• Pub / Sub

• Real-time applications

Application• Online games, message

passing services• Social networks, content-

syndication services• Chat, real-time games

Bad Node Scenarios

Behavior• Large HTTP response sizes

• CRUD• Transaction-heavy systems

Application• Static file servers, reporting

tools• Blogs, CMS• E-Commerce

Node Concepts

• What Do Node Projects Look Like?• Event Loop & Workers• HTTP as a First Class Citizen• Callbacks and Functions as Objects• Modules & Packages

Structure of a Node Project/projectroot/

package.jsonreadme.txtweb/server.jsviews/index.htmlmodels/post.jshelpers/timestamp.jstest/route-test.jspost-test.jsnode_modules/

C:\[projectroot]> node web/server.jsNode server listenening on port 3000 in development mode

Tells Node and NPM what packages are required

The main entry point for your application

User-defined module for handling persistence

User-defined module for other stuff

Root of your actual application

Directory for unit tests

Output directory for all NPM installations

Event Loop + Workers

Client

Clients send HTTP requeststo Node.JS server...

EventLoop

(single thread)

Event loop is woken up by OS.Passes request + responseobjects to worker functionswith callbacks.

Long-running jobsrun on worker threads..

Non-blockingWorker

(internal C++ threadpool)

Responses are sentto main thread viacallback

Event loop returnsresult to client

HTTP

• HTTP is a first class citizen• Request Object– Holds properties about the client– Holds session state– Passes client-data to request handlers

• Response Object– Holds the HTTP response stream– Can be written in chunks

Callbacks and Functions as Objects

// HTTP GET /app/listexports.listapps = function(req, res){

var pageTitle = req.session.userName + "'s Apps";

appProvider.getAppsForUser(req.session.userName, function(error, userApps){

if(error){console.log(error.message);return res.redirect('/');

}

res.render('list_apps', {locals:{title: pageTitle, apps:userApps}})

});}

Modules & Packages

• Including a built-in modulevar http = require('http');

• Including your own module[timestamp.js] exports.currentTime = function(){…}

[server.js] var timestamp = require(‘./helpers/timestamp');[server.js] console.log(timestamp.currentTime());

• Node Package Manager (NPM)[Commandline] C:\> npm install express[server.js] var express = require(‘express’);

Microsoft & Node

Microsoft wants Windows Azure to be an option for developers regardless of stack

=>

Node on Windows Azure

• IISNode• Windows Azure Node PowerShell Cmdlets• Windows Azure Node SDK• Cloud9 IDE

IISNode

• Hosts Node applications in IIS as native modules

• Automatically manages life-cycle of node.exe• Can load-balance multiple node.exe processes

Azure / Node Powershell Cmdlets

• Create new Azure Services• Add Node Web and Worker Roles• Deploy to Azure Emulator• Import Publish Settings• Deploy to Azure (Production / Staging)• Source @ Github

Windows Azure SDK

• Loads Storage Settings from Web.config• Azure Tables• Azure Blobs• Azure Queues

[console] C:\> npm install azure

Source @ Github

Cloud9 IDE

• Browser-based IDE• Deploys to Windows Azure• Only way to deploy without Windows Vista / 7

Popular Node Frameworks and Tools

• Express (MVC)• Connect• Socket.IO• Unit Testing:– Assert (built-in)– Nodeunit

Further Reference

• NodeBeginner.org - Used this to teach myself Node when I was first getting started.

• NodeJS.org - Official Node Homepage• Github.com/WindowsAzure – Azure bits

About Me

• Aaron Stannard– Twitter: @Aaronontheweb– Github: @Aaronontheweb– Blog: http://www.aaronstannard.com/

top related