bloqueado enquanto espera × Processador não é aproveitado no tempo ocioso × Tempo total é a soma do tempo de todas as requisições × Disponibilidade menor da aplicação
de threads × São uma abstração ruim se usadas implicitamente × Difíceis de se manter escaláveis × Exemplo: servidor Apache Escalando um servidor com threads
de callback) é criada para ser chamada quando o evento acontecer 3. O processo continua até que o evento ocorra 4. Quando ocorre, o processo para e o callback é chamado 5. Após o callback finalizar, o processamento volta para onde parou 6. Código continua até que um novo evento aconteça Programação orientada a eventos
sempre usou eventos × Abstração fácil de ser aprendida e intuitiva × Sistemas baseados em eventos tem só uma thread × Esta thread é chamada de event loop × Um evento pode ser, por exemplo, “consulta ao banco de dados completa”
servidor como Apache ou NGINX × Concorrência baseada em eventos × Entrada/saída não-bloqueante e assíncrona × Baixíssimo consumo de memória × Mesma linguagem no backend e no frontend NodeJS
= http.createServer(function(request, response) { fs.readFile('~/my_file.mkv', function(fileContent) { response.write(fileContent); response.end(); }); }); server.listen(3000); console.log('Server is listening on http://localhost:3000'); servidor simples que lê e envia um arquivo
= http.createServer(function(request, response) { fs.readFile('~/my_file.mkv', function(fileContent) { response.write(fileContent); response.end(); }); }); server.listen(3000); console.log('Server is listening on http://localhost:3000'); servidor simples que lê e envia um arquivo
= http.createServer(function(request, response) { fs.readFile('~/my_file.mkv', function(fileContent) { response.write(fileContent); response.end(); }); }); server.listen(3000); console.log('Server is listening on http://localhost:3000'); servidor simples que lê e envia um arquivo
= http.createServer(function(request, response) { database.query('SELECT * FROM users', function(users) { response.write(users); response.end(); }); }); server.listen(3000); console.log('Server is listening on http://localhost:3000'); servidor simples que CONsulta o banco de dados
para exportar módulos × Se o caminho do arquivo é relativo ou absoluto, procura o arquivo × Caso contrário, importa uma dependência ou biblioteca padrão com o nome passado sistema de módulos: CommonJS
var user = require('./user'); // importa arquivo loginService na pasta anterior var loginService = require('../loginService'); // importa biblioteca padrão http var HTTP = require('http'); // importa dependência mysql var mySQL = require('mysql'); application.js
de um servidor robusto × Troca de mensagens entre servidor-cliente e cliente-cliente × Socket.IO é o pacote mais usado para isso × Socket.IO pode ser usado em conjunto, inclusive com o Express Aplicações em tempo real com websockets
require('express'); var app = express(); var SocketIO = require('socket.io'); var socketApp = new SocketIO(app); // recebe uma aplicação http/express socketApp.on('connection', function(client) { // evento de nova conexão client.broadcast.emit('new_user', { // emite evento a todos os clientes message: `User ${ client.id } logged into chat :)` }); }); app.listen(3000); console.log('Server listening on http://localhost:3000');
É um tópico avançado, não nos aprofundaremos × Só é possível porque o Node é em JavaScript × Primeira vez que há esta oportunidade de compartilhamento desde um bom tempo × Tema começou a ser explorado pelo AirBnB em 2013 × Mais complexas porém com a vantagem de ter uma única linguagem principal Aplicações isomórficas/universais
o item anterior até entender programação assíncrona × Não use NodeJS como se fosse Ruby/PHP/Java × Aprenda o sistema de módulos (CommonJS) × Aprenda a usar o npm e as dependências × Estude como fazer um sistema web com o Express × Não use MongoDB até que saiba explicar o porquê