Qual a importância da livre troca de mensagens entre dois pontos de conexão? Entenda do TCP e HTTP e saiba da necessidade e uso de protocolos adicionais como WebSockets.
GET VERBOS DE REQUISIÇÃO Mais comum, solicita um objeto para o servidor. PUT Escrever registro com propriedade de idempotência. Ex: x = 5 POST Escrever registro sem propriedade de idempotência. Ex: x++ DELETE Remove algum registro.
200 STATUS DE RESPOSTA Ok, tudo certo. 301 Redirect permanente. 404 Não encontrado ou desconhecido. 500 Erro no servidor. 201 Registro criado. 304 Registro não modificado. http://httpstatus.es
A B Iniciar conexão TCP GET /index.html HTTP/1.1 Fechar conexão TCP GET /main.css HTTP/1.1 A B Iniciar conexão TCP GET /main.js HTTP/ 1.1 GET /image.jpg HTTP/1.1 CRIAR MÚLTIPLAS CONEXÕES
http://conferenciaweb.w3c.br/conheca-a-especificacao- websockets-e-suas-possibilidades-com-jean-carlo-emer O cenário começa a mudar a partir do momento em que o servidor [e mesmo o cliente] não tem disponível toda a informação que possa nos interessar em um dado instante. Jean Carlo Emer
• Lance a lance de uma partida de futebol. • Cobertura ao vivo do lançamento de novos gadgets. • Painel real-time do Google Analytics. • Ferramentas de edição colaborativa. • Jogos multiplayer.
SERVER-SENT EVENTS (SSE) API que permite ao cliente receber notificações do servidor através de eventos. https://developer.mozilla.org/en-US/docs/Server- sent_events/Using_server-sent_events - 6 9 5 11
• Lance a lance de uma partida de futebol. • Cobertura ao vivo do lançamento de novos gadgets. • Painel real-time do Google Analytics. • Ferramentas de edição colaborativa. • Jogos multiplayer.
var ws = new WebSocket('ws://localhost:8001'); ws.onmessage = function (event) { document.writeln('' + event.data); } CLIENT .JS Apenas recebe mensagens e imprime na tela.
NODE.JS Ideal para aplicações de rede suportando mais de um milhão de conexões concorrentes com uma latência a cerca de 70ms. Servidor assíncrono: não bloqueia esperando por I/O. http://blog.caustik.com/2012/08/19/node-js-w1m- concurrent-connections
var WebSocketServer = require('ws').Server; var server = new WebSocketServer({ port: 8001 }); server.on('connection', function (socket) { socket.on('message', function (message) { socket.send('Server received: ' + message); }); socket.send('Welcome!'); }); SERVER.JS COM WS Cumprimenta novos clientes e responde a suas mensagens.
NODE.JS - SOCKET .IO Camada de transporte com suporte a WebSocket, FlashSockets e Long-polling. Versão 1.0 (beta) depende do engine.io. https://github.com/learnboost/socket.io npm install socket.io
var socket = new io.connect(); socket.on('connect', function () { socket.send('Hello to server!'); socket.on('message', function (data) { document.writeln('' + data + ''); }); }); CLIENT .JS COM SOCKET .IO
NODE.JS - EXPRESS Framework para fazer aplicações web. Auxilia na definição de rotas, tratamento de cookies e muito mais. https://github.com/visionmedia/express npm install express
var app = require('express')(); var server = require('http').Server(app).listen(8003); var io = require('socket.io').listen(server); app.configure(function(){ app.use(require('express').static(__dirname)); }); io.on('connection', function (socket) { socket.on('message', function (message) { socket.send(message); }); socket.send('Welcome!'); }); SERVER.JS COM SOCKET .IO
SOCKET .IO: EVENTOS socket.emit('welcome', 'Welcome!'); socket.emit('response', ':)'); socket.on('welcome', function (data) { // ... }); socket.on('response', function (data) { // ... }); Tratar a comunicação entre cliente e servidor como uma troca através de eventos.
Redes de computadores e a Internet James F. Kurose e Keith W. Ross HTTP - The Definitive Guide David Gourley e Brian Totty High-Performance Browser Networking Ilya Grigorik http://chimera.labs.oreilly.com/books/1230000000545