Apresentação - ads-nodejs/seminario GitHub Wiki

O que é Node.js?

Segundo o site oficial brasileiro http://nodebr.com/ é uma plataforma construída sobre o motor JavaScript do Google Chrome o V8. O motor JavaScript é o ponto chave que faz o node.js funcionar da forma que foi prometido, possibilitando fazer aplicações de rede altamente escaláveis e mais rápidas que aplicações comuns que não utiliza o node.js. O segredo para isso é o conceito diferente aplicado na plataforma para gerenciar os processo de I/O, pois utiliza-se de um modelo não bloqueante direcionada a eventos.

Como surgiu o Node.js?

Foi criado por Ryan Dahl em 2009, e seu desenvolvimento é mantido pela empresa Joyent, onde Dahl trabalha.

Dahl se inspirou para criar Node.js depois de ver barra de progresso de upload de arquivos no Flickr, ele percebeu que o navegador não sabia o quanto do arquivo foi carregado e tinha que consultar o servidor web.

Como funciona o node.js?

Os processos de NodeJs ocupam níveis de memória sensivelmente menores que os de outras linguagens, de modo que os requisitos de servidor para atender ao mesmo número de usuários são menores.

Para dar uma ideia próxima, poderíamos chegar a ter 1.000 usuários conectados ao mesmo tempo e o processo de NodeJS ocuparia somente 5 MB de memória. Ao final, tudo isto se traduz em que empresas grandes podem ter uma economia importante em custos de infraestrutura.

O Node.js vem com módulos diversos que possibilitam trabalhar com recursos de I/O no servidor, são diversas bibliotecas para trabalhar com protocolos diferentes, por exemplo: HTTP, HTTPS, DNS e outros, além de bibliotecas para manipular arquivos, processamento assíncronos, criptografias e manipulação de objetos JSON.

Event-loop

Um loop infinito fica aguardando o novos eventos da aplicação ate que um evento seja disparado, o loop recebe esse o evento e coloca na thead-pool, que é responsavel pelos processos.

I/O não-bloqueante

Uma das características da plataforma Node.js, é que ela trabalha com o conceito de Threads Não-Bloqueantes, ou seja, não há um gerenciador de threads, algo que plataformas como Java e .NET possuem. Vantagem: Alta escalabilidade para servidores, pois não há um agente bloqueando e enfileirando threads quando é utilizado um determinado recurso do sistema. Desvantagem: Esse conceito não é recomendável para o desenvolvimento de sistemas transacionais, visto que há uma grande chance de uma perda dos dados devido a essa falta de controle.

Em uma requisição de I/O o node.js não bloqueia o processo aguardando o termino da tarefa para o início de outra. Exemplo

Em um restaurante o garçon é chamado por um cliente para anotar um pedido, em seguida vai até o balcão do restaurante com a solicitação do cliente e aguarda o pedido do cliente ficar pronto para leva-lo ate ele e em seguida ir até o próximo cliente.

Isso é uma requisição síncrona. Em uma requisição assíncrona o "garçon" não aguardaria o pedido ficar pronto, seguiria para o próximo cliente e anotaria o pedido levando-o até o balcão, fazendo isso até um pedido ficar pronto e ele poder leva-lo ate o "cliente".

Quem usa o node.js

Rdio, Yahoo, Microsoft, Paypal, Walmart, Likedin, Twitter

Exemplo

Ao passar a NodeJS, LindkedIn reduziu sensivelmente o número de servidores que tinham em funcionamento para dar serviço a seus usuários, especificamente de 30 servidores a 3.

Características importantes do Node.js

  • NodeJS se programa do lado do servidor, o que indica que os processos para o desenvolvimento de software em "Node" se realizam de uma maneira muito diferente dos de Javascript do lado do cliente.
  • "Cross Browser", todos navegadores interpretam da mesma forma.
  • Eventos nesta plataforma são orientados a coisas que acontecem do lado do servidor e não do lado do cliente como os que conhecemos anteriormente em Javascript "comum".
  • Implementa os protocolos de comunicações em redes mais habituais, dos usados em Internet, como pode ser o HTTP, DNS, TLS, SSL, etc.

Callbacks

Callbacks são funções executadas de forma assíncrona. São executas de forma processual, o fato de ser assíncrono faz com que a execução dessa função possa ocorrer em diferentes velocidades quando executada, baseando-se em requisições HTTP ou em outros processos do sistema.
As funções Callback não foram criadas especificamente para o node , mesmo que quase tudo no node utilizem-nas, elas foram criadas para serem utilizadas com funções Java Script. Exemplo de código Callback: var myNumber = 1 function addOne() { myNumber++ } // define a função addOne() // executa a função console.log(myNumber) // mostra na saida padrão o numero 2

Esta função apenas incrementa um valor de uma variável criada anteriormente.

Prós e Contras

Excelente para:

  • Comunicação em tempo real
  • Serviços de redes customizadas
  • JSON web service
  • Inferface web focadas no cliente

Bom para:

  • Apps CRUD

Ruim para:

  • Processamento intenso

Condigos teste

Relógio

function agora(){ var dt = Date().slice(16, 24); console.log(dt); } var t = setInterval(agora, 1000);

Servidor

var http = require('http'); //Incluír biblioteca HTTP

// callback var server = http.createServer(function(request, response){ response.writeHead(200, {"Content-Type": "text/html"})// Cabeçalho response.write("<h1>Obrigado por acessar meu servidor</h1>") response.write("<p>Servidor funcionando</p>"); response.end();

});

// vincular servidor a uma porta server.listen(3000);

console.log("Servidor esta on no endereço localhost:3000");

Sobre o assunto

Podcast

Node.js - parte 1

Node.js - parte 2

Node.js - parte 3

livros

Aplicações web real-time com Node.js

⚠️ **GitHub.com Fallback** ⚠️