funmachine

Hello Node

Deixe um comentário

Depois de muito ouvir falar da framework Node.js, resolvi experimentar instalar e correr um “Hello Node”. Para quem não sabe, Node.js é um ambiente javascript que corre do lado do servidor e usa um modelo assíncrono baseado em eventos. O que isto quer dizer é que o Node suporta concorrência, mas de uma forma simples para o programador, em contraste com o modelo de threads, que além de ineficiente, provoca algumas dores de cabeça, principalmente no acesso a recursos. O Node resolve isto de maneira simples, porque no fundo, os processos não correm em paralelo, o que acontece é que o Node assenta naquilo que sempre foi o core do javascript: o Event Loop. O Event Loop é a maneira como o javascript lida com pedidos que podem surgir de qualquer parte do programa. No Node o modelo de programação é totalmente baseado em eventos, assim sendo, fazer um programa Node passa por indicar uma série de eventos que podem acontecer, e definir as callbacks que tratam destes eventos. Isto é parecido com o javascript no browser, que espera interacção dos utilizadores, mas neste caso, como estamos do lado do servidor, temos uma nova gama de eventos que dependem do software que estamos a correr no nosso servidor. Um exemplo é o módulo HTTP, que tem o evento “request”, este é emitido quando um cliente faz um pedido ao servidor.

Penso que o buzz à volta do Node assenta muito nestes conceitos, primeiro usa javascript, uma linguagem fácil e bem conhecida e adoptada em ambiente web. Em segundo lugar é eficiente, e tem um modelo de programação simples, fácil de entender e de gerir, principalmente no que toca ao modelo de concorrência. Claro que o Node tem outras tantas vantagens, principalmente penso que tem muito a dizer no que toca a aplicações web colaborativas, que me parecem ter uns requisitos que encaixam como uma luva neste ambiente, no entanto, só o tempo o dirá, e à medida que for explorando mais o Node, com certeza irei formar e trazer opiniões mais concretas.

Existe muito mais para falar sobre o Node, os recursos encontram-se maioritariamente na web, visto que ainda não existe nenhum livro sobre Node. No entanto a O’reilly já se prepara para lançar um livro “animal” sobre Node, podem aceder à preview aqui.

Nada melhor para perceber e ficar motivado com Node do que fazer um pequeno “Hello Node”. Vou então demonstrar como podem instalar e executar programas Node localmente na vossa máquina. Dificilmente irão encontrar serviços de hosting com suporte a Node, no entanto existem já alguns projectos interessantes que oferecem alojamento Node de borla, muito útil principalmente para fazer uns testes. Um desses serviços, que descobri por acaso, é o Nodester. Uma outra opção que têm se quiserem colocar os vossos programas Node online é usar um serviço cloud, por exemplo o AWS da amazon. Noutro post irei demonstrar como podemos instalar e executar programas Node numa VM da amazon, mas para já, fiquemos por uma instalação local.

O primeiro comentário, e espero que não faço já desistir muita gente, é que precisamos de uma ambiente UNIX para correr o Node. Isto quer dizer que quem tiver Windows tem que instalar uma VM se quiser experimentar e continuar tutorial. Eu testei com Ubuntu, mas penso que para o pessoal dos Macs, tudo é igual.

Existe formas de instalar em ambiente Windows, mas, na minha opinião, ainda são um pouco instáveis, de qualquer forma, podem dar uma olhadela aqui.

1 – Primeiro temos que fazer download do Node. Apontem o browser para a página de downloads do Node.js e façam download do Node.js. (alternativamente podem fazer um check do repositório git)

2 – Abram a shell e extraiam o tar.gz.

3 – Façam cd para dentro na directoria Node.

4 – A seguir devem fazer configure:

$ sudo ./configure

5 – Depois make (aqui é a altura que podem começar a ler a preview do livro Node,js 😉 )

$ sudo make

6 – Finalmente make install:

$ sudo make install

Durante este processo, é possível que sejam identificadas dependências em falta nas vossas máquinas. Esta são bem identificadas, uma pesquisa na net e nos repositórios Ubuntu permitem facilmente instalar estas dependências.

Finalmente, um passo que não é obrigatório, mas que no futuro pode dar muito jeito:

Instalar o NPM, este é o package manager usado para instalar e gerir extensões e módulos Node.

$ curl http://npmjs.org/install.sh | sudo sh

Um exemplo é express.js, uma framework web development para Node. Quando quiserem instalar um módulo (exemplo: express.js) novo basta fazer:

$sudo npm install express

Se tudo correu bem, temos o Node,js instalado no nosso sistema. Finalmente vamos fazer um exemplo e ver a “coisa” a correr!

Abram o vosso editor de código preferido e escrevam o seguinte código js:

var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(8080);
console.log('Server running at http://localhost:8080');

Não vou tentar explicar muito este Hello World, mas quem tiver alguma experiência em javascript com certeza percebe o que se está aqui a passar:

require(‘http’); // factory que retorna um objecto http

de seguida invoca-se o método createServer, que cria um servidor Http. Este recebe uma função com dois parâmetro , req e res.

req é o evento,  quando o server receber um evento request

res é a callback associado ao evento req.

Quando um evento é emitido, por exemplo, um pedido do browser, res escreve um header (writeHead) e depois com .end escreve a mensagem “Hello World”.

Por fim está associado .listen(8080), para indicar que está a “escutar” o porto 8080.

Para correr este exemplo, guardem o ficheiro como example.js e corram no terminal:

$ sudo node example.js

De seguida, apontem o browser para “http://localhost:8080” et voilá!

Fácil, não?

Uma nota, num estilo à la python, o Node vem como uma consola interactiva que permite testar e executar código Node.

Para a usar basta digitar: $ node na consola e podem começar a escrever e executar código javascript e Node.

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s