Pacotes necessários:
sudo apt-get install g++ curl libssl-dev apache2-utils
Vamos buscar o conteúdo diretamente no repositório git, para isto, precisamos:
sudo apt-get install git-core
Agora vamos fazer o clone do Node para instalação:
git clone https://github.com/joyent/node.git
Saída:
Cloning into node...
remote: Counting objects: 35981, done.
remote: Compressing objects: 100% (9717/9717), done.
remote: Total 35981 (delta 28725), reused 32630 (delta 25784)
Receiving objects: 100% (35981/35981), 20.91 MiB | 196 KiB/s, done.
Resolving deltas: 100% (28725/28725), done.
Cópia completa, agora iremos compilar:
cd node
$ ./configure
Saída:
Checking for program g++ or c++ : /usr/bin/g++
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for g++ : ok
Checking for program gcc or cc : /usr/bin/gcc
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for gcc : ok
Checking for library dl : yes
Checking for openssl : not found
Checking for function SSL_library_init : yes
Checking for header openssl/crypto.h : yes
Checking for library util : yes
Checking for library rt : yes
Checking for CLOCK_MONOTONIC : yes
--- libeio ---
Checking for library pthread : yes
Checking for function pthread_create : yes
Checking for function pthread_atfork : yes
Checking for futimes(2) : yes
Checking for readahead(2) : yes
Checking for fdatasync(2) : yes
Checking for pread(2) and pwrite(2) : yes
Checking for sendfile(2) : yes
Checking for sync_file_range(2) : yes
Checking for fdatasync(2) with c++ : yes
'configure' finished successfully (3.138s)
make
$ sudo make install
Já temos o node.js instalado:
node --version
Saída:
v0.5.0-pre
Instalando o NPM, gerenciador de pacotes node
curl http://npmjs.org/install.sh | sudo sh
Instalado, agora um exemplo para instalar um pacote utilizando o npm você só precisa digitar no terminal "npm pacote install", no exemplo abaixo irei instalar o express:
npm install express
mime@1.2.2 ./node_modules/express/node_modules/mime
connect@1.4.1 ./node_modules/express/node_modules/connect
qs@0.1.0 ./node_modules/express/node_modules/qs
express@2.3.4 ./node_modules/express
Hello Word em node.js!
Abra o arquivo hello.js e adicione o seguinte conteúdo:
// Le o modulo http para criar o httpserver
var http = require('http');
// Configura o HTTP server para responder com "hello word" para todas as requisições
var server = http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Hello World\n");
});
// Listen na porta 8000, localhost
server.listen(8000);
// Imprime a mensagem no console dizendo que o node esta em execussão
console.log("Servidor executando em http://127.0.0.1:8000/");
node hello.js
Servidor executando em http://127.0.0.1:8000/
Agora abra seu navegador e veja :)
Em modo texto, temos:
curl http://0:8000
Saída:
Hello World
curl -I http://0:8000
Saída:
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: keep-alive
Programando um servidor TCP em node.js
Vamos programar um servidor TCP que ficará escutando na porta 7000, responderá "hello word" e encerrará a conexão para qualquer conexão TCP:
Abra o arquivo nodetcp.js e adicione o seguinte conteúdo
// Carrega o modulo net para criar um servidor tcp
var net = require('net');
var sys = require('sys');
// Configura o servidor tcp
var server = net.createServer(function (socket) {
// Todas as vezes que alguém conectar, responda "hello" e feche a conexão
socket.addListener("connect", function () {
sys.puts("Connection from " + socket.remoteAddress);
socket.end("Hello World\n");
});
});
// Inicia o servidor escutando na porta 7000
server.listen(7000, "localhost");
// Imprime uma mensagem no terminal informando que o servidor está listening
console.log("TCP server ouvindo na porta 7000 localhost.");
node tcp.jsi
TCP server ouvindo na porta 7000 localhost.
Abra outro terminal e:
telnet localhost 7000
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello World
Connection closed by foreign host.
No primeiro terminal:
node tcp.js
TCP server ouvindo na porta 7000 localhost.
Connection from 127.0.0.1
Node.js como um daemon no Ubuntu
Você já deve ter notado que sempre fazemos: node <script.js>, porém, e se quisermos algo mais profissional como um servidor?
Ah, usar o & e jogar para backgroud?
E se o node imprimir algo e o console for fechado, o STDOUT não existirá e o seu script será encerrado.
E se o processo for encerrado, e se o servidor for reiniciado?
Certo, precisamos de algo mais robusto, como um daemon! Mas, como estamos falando em node.js, que é baseado em eventos, que tal usar o upstart ? O upstart é baseado em eventos e substituto do sysvinit no
RHEL 6 e do /sbin/init do
Ubuntu.
Abra o arquivo /etc/init/nodetcp.conf e adicione o seguinte conteúdo:
description "node.js tcp server"
author "Flavio Torres, ftorres@ymail.com"
# Inicia e finaliza quando receber os comandos start e shutdown
start on started mountall
stop on shutdown
# Faz o Respawn automaticamente:
respawn
respawn limit 99 5
script
export HOME="/home/ftorres"
exec /usr/local/bin/node /home/ftorres/node/app/tcp.js >> /var/log/nodetcp.log 2>&1
end script
post-start script
# Aqui voce pode adicionar um script que irá notificar você que o node foi (re)iniciado
# /usr/local/bin/aviso.sh "node.js foi inciado"
end script
Torne seu script executável e...
Vendo o status do script:
status nodetcp
nodetcp stop/waiting
Iniciando o daemon:
sudo start nodetcp
nodetcp start/running, process 13651
status nodetcp
nodetcp start/running, process 13651
Vamos ver se o nosso tcpserver está listening na porta 7000?
netstat -tnlp
Saída:
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:7000 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 ::1:631 :::* LISTEN -
Testando:
telnet localhost 7000
Saída:
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello World
Connection closed by foreign host.
Ah-há, temos o nosso Hello World!
E o nosso log?
cat /var/log/nodetcp.log
TCP server ouvindo na porta 7000 localhost.
TCP server ouvindo na porta 7000 localhost.
TCP server ouvindo na porta 7000 localhost.
TCP server ouvindo na porta 7000 localhost.
Connection from 127.0.0.1
Fontes: