40
Elo perdido: sincronizando webapps

DevDay - O elo perdido: sincronizando webapps

Embed Size (px)

DESCRIPTION

O Elo perdido: sincronizando webapps com node.js foi uma palestra apresentada no DevDay de Belo Horizonte, na qual fala como criarmos uma app offline com html5 e como podemos sincronizar seus dados com o servidor em Node.js e MongoDb.

Citation preview

Page 1: DevDay - O elo perdido: sincronizando webapps

Elo perdido: sincronizando webapps

Page 2: DevDay - O elo perdido: sincronizando webapps

Elo perdido: sincronizando webapps

Jean Carlo Nascimento aka Suissa

Page 4: DevDay - O elo perdido: sincronizando webapps

Situação

Desenvolver sua aplicação web para que ela continue funcionando mesmo sem conexão com internet.

Page 5: DevDay - O elo perdido: sincronizando webapps
Page 6: DevDay - O elo perdido: sincronizando webapps

Tecnologias

Google GearsNode.jsAir

Page 7: DevDay - O elo perdido: sincronizando webapps

Arquitetura

Page 8: DevDay - O elo perdido: sincronizando webapps
Page 9: DevDay - O elo perdido: sincronizando webapps
Page 10: DevDay - O elo perdido: sincronizando webapps

HTML5

● cache manifest● localStorage● sessionStorage● webSQL - old but gold● indexedDB● navigator

Page 11: DevDay - O elo perdido: sincronizando webapps

HTML5

● http://html5demos.com/offlineapp● http://html5demos.com/storage● http://html5demos.com/storage● http://html5doctor.com/introducing-web-sql-

databases/● http://www.html5rocks.

com/en/tutorials/indexeddb/todo/● http://html5demos.com/nav-online

Page 12: DevDay - O elo perdido: sincronizando webapps
Page 13: DevDay - O elo perdido: sincronizando webapps

Storage

● http://www.jstorage.info/● https://github.com/zefhemel/persistencejs● https://github.com/jeromegn/Backbone.

localStorage

Page 14: DevDay - O elo perdido: sincronizando webapps

Backbone localStorage Adapter v1.0window.SomeCollection = Backbone.Collection.extend({

localStorage: new Backbone.LocalStorage("Nome"), // Nome unico na sua app.

});

Page 15: DevDay - O elo perdido: sincronizando webapps
Page 16: DevDay - O elo perdido: sincronizando webapps

Node.js

● Socket.io● Connect● Now.js● Express● Meteor● DerbyJs

Page 17: DevDay - O elo perdido: sincronizando webapps
Page 18: DevDay - O elo perdido: sincronizando webapps

Doctype html5

<!DOCTYPE html><html>

Page 19: DevDay - O elo perdido: sincronizando webapps

Adicionar suporte ao manifest

AddType text/cache-manifest .manifest

Page 20: DevDay - O elo perdido: sincronizando webapps

Criar o cache manifest

CACHE MANIFEST#comentario

CACHEindex.htmlstyle.cssjquery.jsoffline.js

Page 21: DevDay - O elo perdido: sincronizando webapps

Link o manifest no html

<html manifest="/offline.manifest">

Page 22: DevDay - O elo perdido: sincronizando webapps

offline.js

● navigator.onLine● localStorage

Page 23: DevDay - O elo perdido: sincronizando webapps

navigator.onLine

window.addEventListener("offline", function(e) {alert("offline");})

window.addEventListener("online", function(e) {alert("online");})

Page 24: DevDay - O elo perdido: sincronizando webapps

localStorage

localStorage.setItem()localStorage.getItem()localStorage.clear()localStorage.key()localStorage.removeItem()

Page 25: DevDay - O elo perdido: sincronizando webapps

Node.js - Criando um servidor

var http = require('http');var fs = require('fs');var index = fs.readFileSync('index.html');

http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(index);}).listen(3000);

Page 26: DevDay - O elo perdido: sincronizando webapps

Socket?

● WebSockets● FlashSockets● AJAX long polling● AJAX multipart streaming● Forever Iframe● JSONP Polling

Page 27: DevDay - O elo perdido: sincronizando webapps
Page 28: DevDay - O elo perdido: sincronizando webapps

Websocket

● http://www.websocket.org/● http://html5demos.com/web-socket● http://pt.wikipedia.org/wiki/WebSockets● https://developer.mozilla.org/en-

US/docs/WebSockets

Page 29: DevDay - O elo perdido: sincronizando webapps

Socket.io

Page 30: DevDay - O elo perdido: sincronizando webapps

Socket.io - client<script src="/socket.io/socket.io.js"></script> <script> // Criando uma conexão Socket.io com servidor. var socket = io.connect('http://localhost:8080'); // Ao conectar com servidor... socket.on('connect', function(){ // Enviando mensagem ao servidor apenas para alertar o servidor. socket.send("Ola Servidor"); // Evento "message" de resposta do servidor socket.on('message', function(visitas){ //atualizar localStorage }); }); </script>

Page 31: DevDay - O elo perdido: sincronizando webapps

Socket.io - server// Instanciando os módulos HTTP e Socket.io.var http = require('http').createServer(index) , io = require('socket.io').listen(http); // Configurando a porta de listen do servidor.http.listen(8080); // Iniciando o Socket.IO através do evento "Connection".io.sockets.on('connection', function(socket){ // Evento "message" que ocorre quando entra um novo usuário. socket.on('message', function(){ //busca os dados para o usuario var meus_dados = "{'nome': 'Suissa'}"; socket.emit('message', meus_dados); });});

Page 32: DevDay - O elo perdido: sincronizando webapps

Socket.io - clienthttp://socket.io/

Page 33: DevDay - O elo perdido: sincronizando webapps

Now.js

Page 34: DevDay - O elo perdido: sincronizando webapps

Now.js - client-side$(document).ready(function(){ now.receiveMessage = function(product){ $("#lista").append("<li>"+product+"</li>"); } $("#send-button").click(function(){ now.distributeMessage($("#text-input").val()); $("#text-input").val(""); });

});

Page 35: DevDay - O elo perdido: sincronizando webapps

Now.js - server-sidevar server = require('http').createServer();server.listen(8080);

var nowjs = require("now");var everyone = nowjs.initialize(server);

everyone.now.distributeMessage = function(product){ //salve no database};

Page 36: DevDay - O elo perdido: sincronizando webapps

Now.js - server-side

http://nowjs.com/

Page 37: DevDay - O elo perdido: sincronizando webapps

MongoJs

Page 38: DevDay - O elo perdido: sincronizando webapps

Mongojsvar databaseUrl = "mydb"; var collections = ["produtos"]var db = require("mongojs").connect(databaseUrl, collections);

db.produtos.save({product: my_product}, function(err, saved) {

if( err || !saved )console.log("Produto nao foi salvo!");

else console.log("Produto salvo");

});

Page 39: DevDay - O elo perdido: sincronizando webapps

Mongojs

https://github.com/gett/mongojs

Page 40: DevDay - O elo perdido: sincronizando webapps

Curso Node.js

http://pre-node.turing.com.br/

Suissa & Luciano Ramalho