Exploring Node.jS

Post on 12-Jul-2015

998 views 0 download

Transcript of Exploring Node.jS

Exploring Node.JSDr. Jayaraj Poroor

DependSoft Consultinghttp://dependsoft.com

About DependSoft

My ongoing R&D work: IntegralJ

http://integralj.org (open source)

● Virtual Private Transporto Keyhole approach to secure remote service access.o http://shelloid.como Node.js, Netty, Redis, MySQL, Google protobuf.o Basic engine open sourced.

● Sensoid IoT platformo Distributed stream query platform.o Node.js, Redis, InfluxDB, ElasticSearch, MySQL.

My recent products

Server-side technology requirements● Performance

o Need optimized execution● Concurrency

o Need to support many concurrent client requests● Library support

o e.g., database interfacing.● Framework support

o For rapid application development.

Node.JS● Performance

o Google’s V8 VM with native JIT compilation● Concurrency

o Asynchronous I/O (libuv) + clustering● Library support

o 39K projects in Github● Framework support

o e.g., Express.JS

Synchronous vs Asynchronous I/O● Synchronous I/O

o Thread blocks till I/O request is complete.o e.g., $result = mysql_query(“....”); //PHP

● Asynchronous I/Oo Thread does not blocko Uses callback mechanism to notify completiono e.g., conn.query(“...”, function(err, rows)

{ } );

Node.JS Threading model

1. Single computational thread o Non-blocking, interleaved request processingo Background worker threads for I/O processing

1. Clustering to utilize multi-core machines2. No shared memory between cluster processes.

Node.JS : When to use● Great for

o I/O-centric applications e.g., DB queries, File I/O , network I/O, invocation of

other web services.o Real-time communication

WebSockets, HTTP long polling● Not so great for

o Compute-centric applications e.g., High-end machine learning backend

Event Loop Illustrated

http://www.geekgirl.io/understanding-the-event-loop-in-nodejs/

Anatomy of a “hello world” Node.js

var http = require('http');var server = http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/html'});res.end('<h1>Hello World</h1>');});server.listen(3000);

No separate HTTP engine like Apache required.

Command:

node app.js

Serving a file

Code source: https://github.com/substack/stream-handbook

Buffers the entire file in memory. ●Inefficient for large files.●Client needs to wait till entire file is read.

Node.js Streams

● Data served in chunks.

● Data event fires whenever a new chunk is ready.

Code source: Node.js in Action

Streams can be piped!

File stream (input) is piped to the response stream (output).The response will employ chunked Transfer-Encoding.

Code source: https://github.com/substack/stream-handbook

Package management● npm (Node Package Manager)

o Provides simple & powerful package management.o Reads module dependencies from package.jsono Typical usage: npm install or npm update.o Can store all dependent modules locally or globally

A sample package.json{ "name": "SomeApp", "description": "SomeApp Web Application", "version": "0.0.1", "private": true, "dependencies": { "express": "3.6.0", "connect": "2.15.0", "mysql": "*", }}

Secure HTTP with Node.js

Code source: Node.js in Action

Key and certificate files provided.Use gpg, openssl etc. to generate key and CSR.

Connect framework: Modular web apps

Source

: Node.js in A

ction

Install:npm install connect

Connect: usageCreate a Connect ‘app’.●Will store all middleware.●Itself just a function.

Create a middleware ‘stack’.Requests will execute middleware functions till ‘next()’ is not called or end of stack is reached.

Code source: https://www.npmjs.org/package/connect

Connect: usage (2)● Middleware can be

mounted on specific URL endpoints.

● Does basic routing.

● Error handler middleware.

Create Connect-enabled server.

Code source: https://www.npmjs.org/package/connect

OR

Example Connect middlewares

Serving static filesStatic middlewareconfigured with the folder from which files are served.

Express: Lightweight web framework

Code Source: https://www.npmjs.org/package/express

Routing

Bootstrapping Express application

express – e output

Rendering views with Express

Code S

ou rce: Nod e.js in A

c tion

Express configured with the views folder.

View engine set as ejs.

Looks up index.ejs in the views folder.

View lookup

Source: N

ode.js in Action

Source: Node.js in Action

Passing data to views

Data passed to the view.photos is an array.

An example view

photos array accessed here.

title variable accessed.

Database connectivitynpm install mysql

var mysql = require('mysql');

var connection = mysql.createConnection({

host : 'localhost',

user : 'me',

password : 'secret'

});

connection.connect();

connection.query('...', function(err, rows, fields) {

if (err) throw err;

connection.end();

});

https://github.com/felixge/node-mysql

npms available for virtually any SQL/NoSQL database!

Query completes only when the callback is invoked!

Authentication● passport.js

o Authentication middleware for node.js.o 140+ authentication strategies.o Supports OpenID and OAutho http://passportjs.orgo Session data can be serialized into a store like Redis.

npm install passport

Read more

● Node.js in Action● http://expressjs.com● http://www.nodebeginner.org/

Thank You

Dr. Jayaraj PoroorFounder, DependSoft Consulting

Peace of mind with dependable software.

jayaraj@dependsoft.comhttp://dependsoft.com