14 colaboradores criou o Node.js. Esta tecnologia possui um modelo inovador, sua
arquitetura é totalmente non-blocking thread (não-bloqueante), apresentando uma
boa performance com consumo de memória e utilizando ao máximo e de forma
eficiente o poder de processamento dos servidores, principalmente em sistemas que
produzem uma alta carga de processamento. Usuários de sistemas Node estão livres
de aguardarem por muito tempo o resultado de seus processos, e principalmente
não sofrerão de dead-locks no sistema, porque nada bloqueia em sua plataforma e
desenvolver sistemas nesse paradigma é simples e prático.
Esta é uma plataforma altamente escalável e de baixo nível, pois você vai progra-
mar diretamente com diversos protocolos de rede e internet ou utilizar
bibliotecas
que acessam recursos do sistema operacional, principalmente recursos de sistemas
baseado em Unix. O Javascript é a sua linguagem de programação, e isso foi possível
graças à engine Javascript V8, a mesma utilizada no navegador Google Chrome.
2
Casa do Código
Capítulo 1. Bem-vindo ao mundo Node.js
1.3
Single-thread
Suas aplicações serão single-thread, ou seja, cada aplicação terá instância de um único processo. Se você esta acostumado a trabalhar com programação concorrente em
plataforma multi-thread, infelizmente não será possível com Node, mas saiba que
existem outras maneiras de se criar um sistema concorrente, como por exemplo,
utilizando clusters (assunto a ser explicado no capítulo 9.2), que é um módulo nativo
do Node.js e é super fácil de implementá-lo. Outra maneira é utilizar ao máximo
a programação assíncrona. Esse será o assunto mais abordado durante o decorrer
deste livro, pelo qual explicarei diversos cenários e exemplos práticos em que são
executados em paralelo funções em background que aguardam o seu retorno através
de funções de callback e tudo isso é trabalhado forma não-bloqueante.
1.4
Event-Loop
Node.js é orientado a eventos, ele segue a mesma filosofia de orientação de eventos
do Javascript client-side; a única diferença é que não existem eventos de click do
mouse, keyup do teclado ou qualquer evento de componentes HTML. Na verdade
trabalhamos com eventos de I/O do servidor, como por exemplo: o evento connect
de um banco de dados, um open de um arquivo, um data de um streaming de
dados e muitos outros.
O Event-Loop é o agente responsável por escutar e emitir eventos no sistema. Na
prática ele é um loop infinito que a cada iteração verifica em sua fila de eventos se um determinado evento foi emitido. Quando ocorre, é emitido um evento. Ele o executa
e envia para fila de executados. Quando um evento está em execução, nós podemos
programar qualquer lógica dentro dele e isso tudo acontece graças ao mecanismo de
função callback do Javascript.
O design event-driven do Node.js foi inspirado pelos frameworks Event Machine
do Ruby (http://rubyeventmachine.com) e Twisted do Python (http://twistedmatrix.
com) . Porém, o Event-loop do Node é mais performático por que seu mecanismo é
nativamente executado de forma não-bloqueante. Isso faz dele um grande diferencial
em relação aos seus concorrentes que realizam chamadas bloqueantes para iniciar os
seus respectivos Event-loops.
3
1.5. Instalação e configuração
Casa do Código
1.5
Instalação e configuração
Para configurar o ambiente Node.js, independente de qual sistema operacional você
utilizar, as dicas serão as mesmas. É claro que os procedimentos serão diferentes para cada sistema (principalmente para o Windows, mas não será nada grave).
Figura 1.2: Página de Download do Node.js.
Instalando Node.js: Primeiro passo, acesse o site oficial: (http://nodejs.org)
e clique em Download, para usuários do Windows e MacOSX, basta baixar os
seus instaladores e executá-los normalmente.
Para quem já utiliza Linux com
Package Manager instalado, acesse esse link (https://github.com/joyent/node/wiki/
Installing-Node.js-via-package-manager) que é referente as instruções sobre como
instalá-lo em diferentes sistemas. Instale o Node.js de acordo com seu sistema, caso
não ocorra problemas, basta abrir o seu terminal console ou prompt de comando
e digitar o comando:
node -v && npm -v para ver as respectivas versões do
Node.js e NPM (Node Package Manager) que foram instaladas.
4
Casa do Código
Capítulo 1. Bem-vindo ao mundo Node.js
Figura 1.3: Versão do Node.js e NPM utilizada neste livro.
A última versão estável utilizada neste livro é Node 0.10.22 e NPM 1.3.14.
Alias é altamente recomendável utilizar esta versão ou superior, pois recen-
temente foi identificado uma vulnerabilidade de ataque DoS em versões an-
teriores, veja mais detalhes no blog oficial: (http://blog.nodejs.org/2013/10/22/
cve-2013-4450-http-server-pipeline-flood-dos)
Dica: Todo conteúdo deste livro
será compatível com versões do Node.js 0.8.0 ou superiores. Configurando ambiente de desenvolvimento: Para configurá-lo basta adicionar uma variável de am-
biente NODE_ENV no sistema operacional. Em sistemas Linux ou OSX, basta