Use o código e tenha 10% de desconto!

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

Caio Ribeiro Pereira
Capa

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

Agradecimentos

Primeiramente, quero agradecer a Deus por tudo que fizeste em minha vida! Agradeço também ao meu pai e à minha mãe pelo amor, força, incentivo e por todo apoio desde o meu início de vida. Obrigado por tudo e principalmente por estar ao meu lado em todos os momentos.

Um agradecimento especial à minha namorada Natália Santos, afinal começamos a namorar na mesma época em que comecei este livro, e sua companhia, compreensão e incentivo foram essenciais para persistir neste projeto.

Agradeço à sra. Charlotte Bento de Carvalho, pelo apoio e incentivo nos meus estudos desde a escola até a minha formatura na faculdade.

Um agradecimento ao meu primo Cláudio Souza. Foi graças a ele que entrei nesse mundo da tecnologia. Ele foi a primeira pessoa a me apresentar o computador, e me aconselhou anos depois a entrar em uma faculdade de TI.

Um agradecimento ao Bruno Alvares da Costa, Leandro Alvares da Costa e Leonardo Pinto, esses caras me apresentaram um mundo novo da área de desenvolvimento de software. Foram eles que me influenciaram a escrever um blog, a palestrar em eventos, a participar de comunidades e fóruns, e principalmente a nunca cair na zona de conforto, a aprender sempre. Foi uma honra trabalhar junto com eles em 2011. E hoje, mesmo muita coisa tendo mudado, ainda tenho a honra de trabalhar com o Leandro em uma nova startup que já está virando uma empresa, que é a BankFacil.

Obrigado ao pessoal da editora Casa do Código, em especial ao Paulo Silveira e Adriano Almeida. Muito obrigado pelo suporte e pela oportunidade!

Obrigado à galera da comunidade NodeBR. Seus feedbacks ajudaram a melhorar este livro e também agradeço a todos os leitores do blog Underground WebDev (http://udgwebdev.com). Afinal, a essência deste livro foi baseada nos posts sobre Node.js lá publicados.

Por último, obrigado a você, prezado leitor, por adquirir este livro. Espero que este livro seja uma ótima referência para você.

Comentários

Veja abaixo alguns comentários no blog Underground WebDev a respeito do conteúdo que você esta prestes a ler.

Parabéns pelo Post! Adorei, muito explicativo. A comunidade brasileira agradece.

Tive o prazer de trocar experiências e aprender muito com o Caio. Um cara singular à “instância”, do típico nerd que abraça um problema e não desgruda até resolvê-lo. Obrigado pela ajuda durante nosso tempo trabalho e não vou deixar de acompanhar essas aulas. Parabéns!

Digno de reconhecimento o empenho do Caio no projeto de contribuir com o desenvolvimento e propagação dessa tecnologia. Isso combina com o estilo ambicioso e persistente que sempre demonstrou no processo de formação. Sucesso! Continue compartilhando os frutos do seu trabalho para assim deixar sua marca na história da computação.

Ótimo conteúdo, fruto de muito trabalho e dedicação. Conheci o Caio ainda na faculdade, sempre enérgico, às vezes impaciente por causa de sua ânsia pelo novo. Continue assim buscando aprender mais e compartilhando o que você conhece com os outros. Parabéns pelo trabalho!

Wow, muito bacana Caio! Eu mesmo estou ensaiando para aprender Javascript e cia. Hoje trabalho mais com HTML/CSS, e essa ideia de "para Leigos" me interessa muito! Fico no aguardo dos próximos posts!! =)

Caião, parabéns pela iniciativa, pelo trabalho e pela contribuição para a comunidade. Trabalhamos juntos e sei que você é uma pessoa extremamente dedicada e ansioso por novos conhecimentos. Continue assim e sucesso!

Caio, parabéns pelo curso e pelo conteúdo. É sempre bom contar com material de qualidade produzido no Brasil, pois precisamos difundir o uso de novas tecnologias e encorajar seu uso.

Parabéns pela iniciativa! Acredito que no futuro você e outros façam mais cursos do mesmo, sempre buscando compartilhar o conhecimento pra quem quer aprender.

Sobre o autor

Sou Web Developer na startup BankFacil. Minha experiência baseia-se no domínio dessa sopa de letrinhas: Node.js, Modular Javascript, Modular CSS, Ruby, Java, MongoDB, Redis, Agile, Filosofia Lean, Scrum, XP, Kanban e TDD.

Sou bacharel em Sistemas de Informação pela Universidade Católica de Santos, blogueiro nos tempos livres, apaixonado por programação, web, tecnologias, filmes e seriados.

Participo das comunidades:

  • NodeBR: Comunidade Brasileira de Node.js
  • MeteorBrasil: Comunidade Brasileira de Meteor
  • DevInSantos: Grupo de Desenvolvedores de Software em Santos

Iniciei em 2011 como palestrante nos eventos DevInSantos e Exatec, abordando temas atuais sobre Node.js e Javascript.

Autor dos Blogs: Underground WebDev e Underground Linux.

Prefácio

 

As mudanças do mundo web

 

Tudo na web se trata de consumismo e produção de conteúdo. Ler ou escrever blogs, assistir ou enviar vídeos, ver ou publicar fotos, ouvir músicas e assim por diante. Isso fazemos naturalmente todos os dias na internet. E cada vez mais aumenta a necessidade dessa interação entre os usuários com os diversos serviços da web. De fato, o mundo inteiro quer interagir mais e mais na internet, seja através de conversas com amigos em chats, jogando games online, atualizando constantemente suas redes sociais ou participando de sistemas colaborativos. Esses tipos de aplicações requerem um poder de processamento extremamente veloz, para que seja eficaz a interação em tempo real entre cliente e servidor. E mais, isto precisa acontecer em uma escala massiva, suportando de centenas a milhões de usuários.

Então o que nós, desenvolvedores, precisamos fazer? Precisamos criar uma comunicação em tempo real entre cliente e servidor — que seja rápida, atenda muitos usuários ao mesmo tempo e utilize recursos de I/O (dispositivos de entrada ou saída) de forma eficiente. Qualquer pessoa com experiência em desenvolvimento web sabe que o HTTP não foi projetado para suportar estes requisitos. E pior, infelizmente existem sistemas que os adotam de forma ineficiente e incorreta, implementando soluções workaround ("Gambiarras") que executam constantemente requisições assíncronas no servidor, mais conhecidas como long-polling. Para sistemas trabalharem em tempo real, servidores precisam enviar e receber dados utilizando comunicação bidirecional, ao invés de utilizar intensamente requisição e resposta do modelo HTTP através do Ajax. E também temos que manter esse tipo comunicação de forma leve e rápida para continuar escalável, reutilizável e de desenvolvimento fácil de ser mantido a longo prazo.

 

A quem se destina este livro?

 

Esse livro é destinado aos desenvolvedores web, que tenham pelo menos conhecimentos básicos de Javascript e arquitetura cliente-servidor. Ter domínio desses conceitos, mesmo que seja um conhecimento básico deles, será essencial para que a leitura desse livro seja de fácil entendimento.

 

Como devo estudar?

 

Ao decorrer da leitura serão apresentados diversos conceitos e códigos, para que você aprenda na prática toda a parte teórica do livro. A partir do capítulo 4 até o capítulo final, iremos desenvolver na prática um projeto web, utilizando os principais frameworks e aplicando as boas práticas de desenvolvimento Javascript para Node.js.

Sumário

  • 1 - Bem-vindo ao mundo Node.js
    • 1.1 - O problema das arquiteturas bloqueantes
    • 1.2 - E assim nasceu o Node.js
    • 1.3 - Single-thread
    • 1.4 - Event-Loop
    • 1.5 - Instalação e configuração
    • 1.6 - Gerenciando módulos com NPM
    • 1.7 - Entendendo o package.json
    • 1.8 - Escopos de variáveis globais
    • 1.9 - CommonJS, como ele funciona?
  • 2 - Desenvolvendo aplicações web
    • 2.1 - Criando nossa primeira aplicação web
    • 2.2 - Como funciona um servidor http?
    • 2.3 - Trabalhando com diversas rotas
    • 2.4 - Separando o HTML do Javascript
    • 2.5 - Desafio: Implementar um roteador de url
  • 3 - Por que o assíncrono?
    • 3.1 - Desenvolvendo de forma assíncrona
    • 3.2 - Assincronismo versus Sincronismo
    • 3.3 - Entendendo o Event-Loop
    • 3.4 - Evitando Callbacks Hell
  • 4 - Iniciando com o Express
    • 4.1 - Por que utilizá-lo?
    • 4.2 - Instalação e configuração
    • 4.3 - Criando um projeto de verdade
    • 4.4 - Gerando scaffold do projeto
    • 4.5 - Organizando os diretórios do projeto
  • 5 - Dominando o Express
    • 5.1 - Estruturando views
    • 5.2 - Controlando as sessões de usuários
    • 5.3 - Criando rotas no padrão REST
    • 5.4 - Aplicando filtros antes de acessar as rotas
    • 5.5 - Indo além: criando páginas de erros amigáveis
  • 6 - Programando sistemas real-time
    • 6.1 - Como funciona uma conexão bidirecional?
    • 6.2 - Conhecendo o framework Socket.IO
    • 6.3 - Implementando um chat real-time
    • 6.4 - Organizando o carregamento de Sockets
    • 6.5 - Socket.IO e Express usando a mesma sessão
    • 6.6 - Gerenciando salas do chat
    • 6.7 - Notificadores na agenda de contatos
    • 6.8 - Principais eventos do Socket.IO
  • 7 - Integração com banco de dados
    • 7.1 - Bancos de dados mais adaptados para Node.js
    • 7.2 - Instalando o MongoDB
    • 7.3 - MongoDB no Node.js utilizando Mongoose
    • 7.4 - Modelando com Mongoose
    • 7.5 - Implementando um CRUD na agenda de contatos
    • 7.6 - Persistindo estruturas de dados usando Redis
    • 7.7 - Mantendo um histórico de conversas do chat
    • 7.8 - Persistindo lista de usuários online
  • 8 - Preparando um ambiente de testes
    • 8.1 - Mocha, o framework de testes para Node.js
    • 8.2 - Criando um Environment para testes
    • 8.3 - Instalando e configurando o Mocha
    • 8.4 - Rodando o Mocha no ambiente de testes
    • 8.5 - Testando as rotas
    • 8.6 - Deixando seus testes mais limpos
  • 9 - Aplicação Node em produção - Parte 1
    • 9.1 - O que vamos fazer?
    • 9.2 - Configurando Clusters
    • 9.3 - Redis controlando as sessões da aplicação
    • 9.4 - Monitorando aplicação através de logs
    • 9.5 - Otimizações no Express
  • 10 - Aplicação Node em produção - Parte 2
    • 10.1 - Mantendo a aplicação protegida
    • 10.2 - Externalizando variáveis de configurações
    • 10.3 - Aplicando Singleton nas conexões do Mongoose
    • 10.4 - Mantendo o sistema no ar com Forever
  • 11 - Node.js e Nginx
    • 11.1 - Servindo arquivos estáticos do Node.js usando o Nginx
  • 12 - Continuando os estudos

    Dados do produto

    Número de páginas:
    161
    ISBN:
    978-85-66250-14-5
    Data publicação:
    05/2013

    Compartilhe!

    Compartilhe no Facebook Compartilhe no Twitter