node.js dao
       Vova Miguro
What’s it all about?
Node.js is a platform built on
Chrome’s JavaScript runtime for
easily building fast, scalable
network applications.
                           -nodejs.org
How?

Let’s keep slow operations
from blocking other
operations.
traditional I/O

var data = file.read(‘image.png’);
//zzz...
doSomething(data);




           something not right here...
async I/O
file.read(‘image.png’,function(data){
  doSomething(image);
});
doSomethingElse();




                     profit!
callback()




                          callback()
callback()
node.js internals

• v8 (yeah, it’s Chrome’s engine)
• libev (event loop)
• libeio (asynchronous version of
  POSIX API)
it is only one thread!
file.read(‘file.txt’,function(data){
   //will never fire...
})
while(true){
   //blocking entire process
}
http server
var http = require('http');
http.createServer(function (req, res) {
 res.writeHead(200, {'Content-Type': 'text/plain'});
 res.end('Hello Worldn');
}).listen(3000);
watch file

var fs = require('fs');
fs.watchFile('system.log',function () {
 console.log('log changed!');
});
node & mongo
var mongodb = require('mongodb');
var server = new Server('127.0.0.1', 27017, {});
new Db('test', server, {}).open(function (error, client) {
 var collection = new Collection(client, 'tmp');
 //insert doc
 collection.insert({a:12,b:'string'},{},function(){
  //find doc
    collection.find({}, {limit:10}).toArray(function(err, docs) {
   //do smth with docs
  });
 });
node & web sockets
//server
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
 socket.emit('news', {hello:'world'});
});
//client
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
 console.log(data);
});
let’s see...
suited for...
• real time
• streaming
• process monitoring
• JSON API’s
do not use for this...
do not use for this...




• CPU heavy apps
• data transformation
?

node.js dao

  • 1.
    node.js dao Vova Miguro
  • 2.
  • 3.
    Node.js is aplatform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. -nodejs.org
  • 4.
    How? Let’s keep slowoperations from blocking other operations.
  • 5.
    traditional I/O var data= file.read(‘image.png’); //zzz... doSomething(data); something not right here...
  • 6.
    async I/O file.read(‘image.png’,function(data){ doSomething(image); }); doSomethingElse(); profit!
  • 7.
    callback() callback() callback()
  • 8.
    node.js internals • v8(yeah, it’s Chrome’s engine) • libev (event loop) • libeio (asynchronous version of POSIX API)
  • 9.
    it is onlyone thread! file.read(‘file.txt’,function(data){ //will never fire... }) while(true){ //blocking entire process }
  • 10.
    http server var http= require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Worldn'); }).listen(3000);
  • 11.
    watch file var fs= require('fs'); fs.watchFile('system.log',function () { console.log('log changed!'); });
  • 14.
    node & mongo varmongodb = require('mongodb'); var server = new Server('127.0.0.1', 27017, {}); new Db('test', server, {}).open(function (error, client) { var collection = new Collection(client, 'tmp'); //insert doc collection.insert({a:12,b:'string'},{},function(){ //find doc collection.find({}, {limit:10}).toArray(function(err, docs) { //do smth with docs }); });
  • 15.
    node & websockets //server var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.emit('news', {hello:'world'}); }); //client var socket = io.connect('http://localhost'); socket.on('news', function (data) { console.log(data); });
  • 16.
  • 17.
    suited for... • realtime • streaming • process monitoring • JSON API’s
  • 18.
    do not usefor this...
  • 19.
    do not usefor this... • CPU heavy apps • data transformation
  • 20.