Upload
nuno-paz
View
112
Download
10
Embed Size (px)
Citation preview
O Bom, o Mau, o Vilão... E o
Agenda
• About me
• Node.js
• Instalação
• Hands On
• Most Wanted
About me
Há bola hoje?
Node.js
Objectivo
NODE.js ?
• Ambiente de execução construida sobre “V8 Javascript Engine”
• Paradigma “Event-driven”
• Ryan Dahl
• Opensource
• Cross - platform
Node standard library
V8Thread
pool (libeio)
Eventloop
(libev)
Custo I/O
AcessoCiclos de
processador
Cache L1 3
Cache L2 14
RAM 250
Disco 41 000 000
Rede 240 000 000
http://goo.gl/ZmO7x
Waiting
Encaminhamento dopedido
Query DB ProcessamentoDos resultados
log Envio da resposta
Threads/Processos
• Podemos ter quatro pedidos concorrentes
Funcionamento
O BOM, o mau e o vilão
• Objetivo
• E concorrência com este modelo?
Estado
Em pRODUÇÃO
http://goo.gl/ONfP9B
INstalação
Instalação
Instalaçãocd /opt/
wget http://nodejs.org/dist/v0.8.18/node-v0.8.18-linux-
x64.tar.gz
tar xvzpf node-v0.8.18-linux-x64.tar.gz
ln -s /opt/node-v0.8.18-linux-x64 /opt/node-latest-stable
InstalaçãoBackup do ficheiro /etc/profilecp -Ra /etc/profile /etc/profile.bckp
Adicionamos o caminho dos binários do nodeecho "PATH=$PATH:/opt/node-latest-stable/bin" >> /etc/profile
Adicionamos o caminho das bibliotecas do nodeecho "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/node-latest-stable/lib" >> /etc/profile
Expor os binários e as bibiotecas ao SOecho "export PATH LD_LIBRARY_PATH" >> /etc/profile
Restart
Hands on
Basic Server
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello ISCTE');
}).listen(1337);
console.log('Server running at
http://127.0.0.1:1337/');
Blocking Vs NON-BLOCKing code
Cluster MODE
http://goo.gl/r61IHP
Load Balancer
http://goo.gl/QLcBAe
Debug
Most wanted
Instalação de novos componentes
https://www.npmjs.com/
Instalação de novos componentes
• Comandos base:• npm install <PACKAGE>
• npm install –g <PACKAGE>
• Boas práticas:• npm init
• npm install <PACKAGE> --save
Socket.io“WebSocket é uma tecnologia que permite a comunicação bidirecional por canais full-duplex sobre um único socket Transmission Control Protocol (TCP)”
http://pt.wikipedia.org/wiki/WebSocket
Socket.io
1 2 3
4 5 6
7 8 9
Express
• Web framework
• Framework inpirada na framework Sinatra (Ruby)
• Conjunto de recursos já integrado (logger, routing,etc....)
packages people 'npm install' a lot
Express
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('Hello ISCTE')
})
app.listen(1337)
Colors
var colors = require('colors');
console.log('hello'.green); // outputs green text
console.log('i like cake and pies'.underline.red) // outputs red underlined text
console.log('inverse the color'.inverse); // inverses the color
console.log('OMG Rainbows!'.rainbow); // rainbow
console.log('Run the trap'.trap); // Drops the bass
most depended-upon packages
Hapi.js
• Framework para construção de serviços REST
Logs
• Winston
Biblioteca para logging multi transporte
Permite extender o “transporte” dos logs
packages people 'npm install' a lot
Forever
• Gestor de processos de aplicações
forever start simple-server.js
forever restartall
forever logs
forever list
forever stop 0
PM2
• Gestor de processos de aplicações
pm2 start app.js
packages people 'npm install' a lot
PM2
• Gestor de processos de aplicações
pm2 start <app_name|id|all>
pm2 restart <app_name|id|all>
pm2 delete <app_name|id|all>
packages people 'npm install' a lot
PM2
• Gestor de processos de aplicações
pm2 describe 0
packages people 'npm install' a lot
NOSQL
Questões?
Obrigado