@techmeetup Edinburgh nodejs talk

Post on 09-May-2015

2.144 views 0 download

description

My nodejs presentation given on 10th November 2010

Transcript of @techmeetup Edinburgh nodejs talk

  

Tane Piper - @tanepiper

An Introduction To

http://nodejs.org

  

What Is Node?

nodejs (node) is a set of bindings to the V8 javascript VM. They allow developers to script

programs using asynchronous I/O in javascript.

Focused on performance and memory useage through an event loop – not threads.

  

Features of Node

Node is similar to Ruby's Event Machine Python's Twisted

Node takes the event model a bit further—it presents the event loop as a language construct instead of as a library.

Node simply enters the event loop after executing the input script. Node exits the event loop when there are no more callbacks to perform

  

Synchronous vs Asyncronous

$query="SELECT * FROM contacts";$result=mysql_query($query);

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

File file = new File("C:\\MyFile.txt");fis = new FileInputStream(file);fis.close();

  

What is the software doing?

  

x

http://www.flickr.com/photos/nationaalarchief/3675431410/

What is the software doing?

It's Waiting – Wasting cycles

  

Synchronous vs Asyncronous

db.query(”SELECT * FROM contacts”, function(err, rows) {rows.forEach(function(row) {

console.log(row);});

});

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

fs.readFile('techmeetup.txt', function(data) {console.log(data);

});

doSomethingElseWhileNotWaiting();

  

A HTTP Server in 4 lines

var http = require('http');

http.createServer(function (req, res) {  res.writeHead(200, {'Content­Type': 'text/plain'});  res.end('Hello World\n');}).listen(1337, "127.0.0.1");

console.log('Server running at http://127.0.0.1:1337/');

  

EventEmitter – The powerhouse of node

This should look familiar to most of you:

jQuery('.foo').click(function() {var foo = this.attr('rel');

});

  

EventEmitter – The powerhouse of node

var EventEmitter = require('events').EventEmitter;

var emitter = new EventEmitter;

emitter.on('name', function(data){    console.log(data + ' rocks');});

emitter.emit('name', 'nodejs');emitter.emit('name', 'techmeetup');

  

EventEmitter – A I/O Example

var spawn = require('child_process').spawn,    ls    = spawn('ls', ['­lh', '/usr']);

ls.stdout.on('data', function (data) {  console.log('stdout: ' + data);});

ls.stderr.on('data', function (data) {  console.log('stderr: ' + data);});

ls.on('exit', function (code) {  console.log('child proc exited with code ' + code);});

  

NPM – Node Package Manager

https://github.com/isaacs/npm

Used to install and publish your node programs.

JSON package format that It manages dependencies.

Integrates nicely with man pages

  

ExpressJS – Nodejs-powered framework

npm install express

Robust routingRedirection helpers

Dynamic view helpersApplication level view options

Content negotiationFocus on high performance

View rendering and partials supportEnvironment based configurationSession based flash notifications

  

ExpressJS - ExampleVar express = require('express');

var app = express.createServer();

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

app.post('/:name', function(req, res, next) {var name = req.params.name;

   If (!name) {     next(new Error('No name passed');   } else {     res.send(['Hello', name].join(' '));   }});

app.listen(3000);

  

Something new: node-canvas

var Canvas = require('canvas')  , canvas = new Canvas(200,200)  , ctx = canvas.getContext('2d');var fs = require('fs')  , out = fs.createWriteStream(__dirname + '/text.png')  , stream = canvas.createPNGStream();

ctx.font = '30px Droid Sans';ctx.rotate(.1);ctx.fillText("Yay Techmeet Edinburgh!", 50, 100);

stream.on('data', function(chunk){  out.write(chunk);});

stream.on('end', function(){  console.log('saved png');});

  

Something new: node-canvas

  

nodejs Community

Google Groups:nodejs – General Community

nodejs-dev – Low level development

https://github.com/ry/node/wiki/modules

  

Thank You

Any Questions?