Apresentação - ads-nodejs/seminario GitHub Wiki
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.
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.
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.
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.
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".
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.
- 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 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.
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
function agora(){ var dt = Date().slice(16, 24); console.log(dt); } var t = setInterval(agora, 1000);
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");