Conhecendo o mundo
Caio Ribeiro Pereira
Twitter: @crp_underground
Github: caio-ribeiro-pereira
Blog: Underground WebDev
Autor do livro
casadocodigo.com.br/products/livro-nodejs
Autor do livro
casadocodigo.com.br/products/livro-meteor
Autor
Web Developer
Entusiasta Node.js / Javascript
Portifólio: crpwebdev.com
Bacharel Sistemas de Informação na Unisantos
O que é isso?
• Servidor web de baixo-nível;
• Foco em real-time e alta escalabilidade;
• Nascido em 2009;
• O papai é o Ryan Dahl;
• 14 médicos no dia do parto;
• O filho nasceu grande com:
–8000 linhas de C++;
–2000 linhas de Javascript;
Node.js + Javascript V8
Node.js + Event I/O
Node.js + Non-Blocking
Threads
Blocking Threads Non-Blocking Threads
Node.js + Funções Assíncrona
Node.js = Alta
escalabilidade
Node.js = Real-Time
Real-Time != Ajax
Ajax = Requisição assíncrona
HTTP
Real-time = Conexão bidirecional
com WebSockets
O que fazer com tudo isso?
Servidores de Games Online
Aplicativos Real-time
Processamento assíncrono
Aplicações multi-protocolo
APIs REST
Servidor HTTP
Outros frameworks I/O
Twisted – Python: twistedmatrix.com
Tornado – Python: tornadoweb.org
Thin – Ruby: code.macournoyer.com/thin
EventMachine – Ruby: rubyeventmachine.com
Grizzly – Java: grizzly.java.net
Empresas que utilizam
Node.js
Ferramentas e módulos do
Node.js
ToolKit para trabalhar com
Node.js
Editor de código:
TextMate, SublimeText, Gedit, Eclipse, Cloud9,
Vim
Linguagens:
Javascript, CoffeeScript, TypeScript ou Haxe
Debuggers:
Chrome V8 Eclipse Plugin, NodeDebugger
Gerenciador de pacotes:
NPM – Node Package Manager
Alguns módulos…
Web Frameworks:
Express, Geddy, Sails, Meteor
ODMs e ORMs:
Mongoose, Sequelize, Riak-js, Nedis, Cradle
Canivetes suíços:
Underscore.js, Moment, Grunt, Gulp, Validator
TDD:
Mocha, Should, Chai, Expect.js, Karma
Alguns módulos…
Template Engine:
Jade, EJS, Haml.js, Handlebars
CSS Engine:
Stylus, Less, Sass
CMS e Blog:
Calipso, Blacksmith, Harpjs
Real-time:
Socket.IO, NowJS, SockJS
Onde hospedar?
Node.js na prática
Código-Fonte:
https://github.com/caio-ribeiro-pereira/
devinsantos
Round 1
3 maneiras de fazer
Hello World
com Node.js
Round 2
Mini-Chat
Final Round
Simple Analytics
Dúvidas? Críticas?
Sugestões?
Obrigado pessoal!

Conhecendo mundo Node.js

Notas do Editor

  • #6 É uma plataforma server-side com foco em desenvolvimento de aplicações de alta escalabilidade, processamento intensivo com resposta real-time. Seu nascimento foi em 2009 pelo autor Ryan Dahl, atualmente esta na versão 0.6.15, cerca de +8000 linhas em C++ com +2000 linhas em JS. 14 colaboradores iniciais
  • #8 Node.js foi escrito em C++ com Javascript V8 do Google. Porém a linguagem que o programador irá trabalhar é com Javascript no servidor. Isso facilita muito a vida dos desenvolvedores web, pois praticamente você irá trabalhar com menos tecnologias, se resumindo em HTML, CSS e JS.
  • #9 Uma das características notáveis no Node.js é o seu paradigma orientado a eventos de I/O Javascript realiza eventos através dos Callbacks, e Node.js utiliza esse Callbacks da linguagem para tratar eventos de I/O. Alguns exemplos de I/O bem conhecido seria o tratamento do evento conectar, ou seja, ao conectar no servidor faça alguma tarefa, ao desconectar também faça algo. Até mesmo é possível tratar alguns eventos quando o próprio servidor irá cair.
  • #10 Trabalhar com Threads Não bloqueantes significa não travar um recurso quando haver concorrencia para usá-lo. Isso faz com que Node.js seja perfeito para trabalhar em ambientes que não é prioridade travar um recurso, um bom exemplo disso são os games onlines e os alerts do Facebook, Twitter e LinkedIn.
  • #12 Com o recurso de Threads N-Bloqueantes é possível atingir uma alta escalabilidade comparado com sistemas de Threads-Bloqueantes, isso ocorre do fato de Threads Bloqueantes mantem alocados na memoria do servidor essas threads até que todas elas sejam satisfeitas. E esse tempo que elas ficam são maiores do com num sistema Não-Bloqueante, por isso a sua escalabilidade é inferior.
  • #13 Um dos grandes destaques é que Node.js foi projetado para trabalhar com Real-time. Algo totalmente diferente de Ajax Real-time pode ser tanto unicast 1 cliente com 1 servidor como broadcast 1 servidor para N clientes.
  • #14 Ajax é um recurso do HTTP de comunicação Unidirecional e Real-time vem do WebSocket e FlashSocket que mantem comunicacao aberta entre cliente servidor, teoricamente conhecida como conexao bidirecional.
  • #20 A nova versão mobile do LinkedIn é totalmente HTML5 e seu back-end antigo era em Rails pelo qual utilizava 15 servidores com 15 instâncias da aplicação, após mudar seu back-end para Node.js passou a utilizar apenas 4 instâncias, diminuindo mais que a metade de instâncias dos 15 servidores.
  • #21 Assim como o LinkedIn a SoundCloud utiliza em seu back-end mobile Node.js
  • #22 Voxer app do iPhone com back-end node.js, que visa transformar seu iPhone em um rádio Nextel.
  • #23 Sistema de táxi privado totalmente mobile, há diversos pontos Ubers no EUA com motoristas prontos para te buscar e levá-lo para onde desejar, igual a um táxi, a diferença é que você solicita via mobile e também o pagamento é via mobile através de cartão de crédito.
  • #24 IDE totalmente focada para desenvolvimento Node.js e tbm foi desenvolvida com Node.js em seu back-end
  • #25 Criou um projeto open source chamado Mojito que é um Framework MVC para Node.js