SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
Rafael Sales
Real-Time Apps
With Meteor
WEB

DB

Presentation
CPU

HTTP
WEB

Cloud

DB

DB

Presentation
CPU

HTTP

Data
CPU

?

CPU
Client/
Server

WEB

Cloud

DB

DB

DB

Data
CPU

RPC,
NFS...

CPU

Presentation
CPU

HTTP

Data
CPU

?

CPU
Como seria esse
protocolo?
• APIs são assinaturas de conjuntos de dados
• Cache local dos dados no cliente
• Chamada de métodos ao servidor (RPC)
• Cliente pode simular métodos do servidor
modificando seu cache local de dados
Meteor é uma plataforma open-source
para criar aplicações web modernas
Real-time
Reactive programming
JavaScript
Real-time
Reactive programming
JavaScript
Só JavaScript
Cliente e servidor escritos em JavaScript
Mesma API disponível no cliente e servidor
Inclusive a API do Banco de Dados
// código compartilhado
if (Meteor.isServer) {
// código do servidor
}
if (Meteor.isClient) {
// código do cliente
}

Só JavaScript

Cliente e servidor escritos em JavaScript
Mesma API disponível no cliente e servidor
Inclusive a API do Banco de Dados
API do Banco de Dados no cliente?
API do Banco de Dados no cliente?

Messages = new
Meteor.Collection("messages");
 
Messages.insert({ text: "Hello world!" });
 
Messages.find();
Sincronização
de dados
O cliente faz assinatura de um conjunto de
dados que deseja manter-se atualizado
O servidor irá manter tais conjuntos
atualizados nos clientes
Sem mais...
function getLastMessages() {
$.get('/last-messages', callback);
}
E como faz?
/server/chat.js
Meteor.publish("messages-to-me", function
() {
return Messages.find({ to: myId });
});

/client/chat.js
Meteor.subscribe("messages-to-me");
Atualização da página
em tempo real
Partes atualizáveis são escritas com templates
automaticamente atualizados
quando o BD é alterado
Sem mais...
$.get('/messages',
function(responseBody) {
$('#messages').html(responseBody);
});

JavaScript haters
Sem mais...
$.get('/messages', function(messages) {
var list = $('ul');
list.empty();
$.each(messages, function(index, msg) {
var newItem = $('<li/>', { text: msg.text });
list.append(newItem);
});
});

JavaScript Lovers
E como faz?
/client/index.html
<template name="container">
<ul>
{{#each messages}}
<li> {{text}} </li>
{{/each}}
</ul>
</template>
/client/chat.js
Template.container.messages = function() {
  return Messages.find();
};
Compensação
de latência
Alterações de dados efetuadas no cliente refletem
a UI ao mesmo tempo que são enviadas ao servidor
Cópia dos dados dos clientes e o UI são corrigidos
caso o servidor rejeite as alterações
Sem mais...
$.post('/messages/create',
parameters,
function(newMsg) {
var li = $('<li/>', { text: newMsg.text });
$('ul').append(li);
});
Hot Code Pushes
=> alteração no código
=> build do JS
=> envia para cliente e atualiza
Pacote da aplicação
independente
Aplicação e suas dependências empacotadas
Executa em ambientes que suportam node.js
Interoperabilidade
DDP - Distributed Data Protocol
Smart Packages
Meteorite: package manager for Atmosphere
Injetam código no cliente e/ou servidor
É possível substituir pacotes padrão,
como o de templating (Handlebars.js)
Exemplo: Leaderboard
<template name="leaderboard">
  <div class="leaderboard">
    {{#each players}}
      {{> player}}
    {{/each}}
  </div>

H
TM

L

  {{#if selected_name}}
   <div class="details">
     <div class="name">{{selected_name}}</div>
     <input type="button" class="inc”
value="Give 5 points" />
   </div>
  {{else}}
  <div class="none">Click a player to select</div>
  {{/if}}
</template>
<template name="leaderboard">
  <div class="leaderboard">
    {{#each players}}
      {{> player}}
    {{/each}}
  </div>

H
TM

L

  {{#if selected_name}}
<template name="player">
<template name="player">
   <div class="details">
  <div class="player {{selected}}">
  <div class="player {{selected}}">
     <div class="name">{{selected_name}}</div>
    <span class="name">{{name}}</span>
    <span class="name">{{name}}</span>
    <span class="score">{{score}}</span>
     <input type="button" class="inc”
    <span class="score">{{score}}</span>
  </div>
  </div>
value="Give 5 points" />
</template>
</template>
   </div>
  {{else}}
  <div class="none">Click a player to select</div>
  {{/if}}
</template>
Players = new Meteor.Collection(“players");

JS

if (Meteor.isServer) {
  Meteor.startup(function () {
    if (Players.find().count() === 0) {
      var names = ["Ada Lovelace",
                   "Grace Hopper",
                   "Marie Curie",
                   "Carl Friedrich Gauss",
                   "Nikola Tesla",
                   "Claude Shannon"];
      for (var i = 0; i < names.length; i++)
        Players.insert({
name: names[i],
score: Random.floor(Random.fraction()*10)*5
});
}
  });
}
Players = new Meteor.Collection(“players");

JS

if (Meteor.isClient) {
  Template.leaderboard.players = function() {
    return Players.find({}, { sort: { score: -1, name: 1 }});
  };
  Template.leaderboard.selected_name = function() {
    player = Players.findOne(Session.get("selected_player"));
    return player && player.name;
  };
Template.leaderboard.events({
    'click input.inc': function() {
      Players.update(Session.get("selected_player"),
{ $inc: { score: 5 }});
    }
  });
  Template.player.events({
    'click': function() {
      Session.set("selected_player", this._id);
    }
  });
}
meteor.com
github.com/meteor/meteor
ra

elc
fa

ith
g

@g
ds

.co
ub

ai
m

/ra
m

Obrigado!

om
l.c

els
fa

es
al

Mais conteúdo relacionado

Mais procurados

Performance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsPerformance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsWaldyr Felix
 
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...WordCamp Floripa
 
Dicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.x
Dicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.xDicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.x
Dicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.xRodrigo Kono
 
Novidades do ASP.NET 5.X
Novidades do ASP.NET 5.XNovidades do ASP.NET 5.X
Novidades do ASP.NET 5.XEduardo Pires
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebElenilson Vieira
 
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...MVP ShowCast
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?akamud
 
.NET Core + MongoDB + Selenium: extração de dados de páginas Web - Databases SP
.NET Core + MongoDB + Selenium: extração de dados de páginas Web - Databases SP.NET Core + MongoDB + Selenium: extração de dados de páginas Web - Databases SP
.NET Core + MongoDB + Selenium: extração de dados de páginas Web - Databases SPRenato Groff
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)Renato Groff
 
ASP.NET Core 2.1 #dotnetconf
ASP.NET Core 2.1 #dotnetconfASP.NET Core 2.1 #dotnetconf
ASP.NET Core 2.1 #dotnetconfRodrigo Kono
 
Guia do F12: Chrome Developer Tools
Guia do F12: Chrome Developer ToolsGuia do F12: Chrome Developer Tools
Guia do F12: Chrome Developer ToolsLeonardo Tegon
 
Microservices com ASP.NET 5
Microservices com ASP.NET 5Microservices com ASP.NET 5
Microservices com ASP.NET 5Waldyr Felix
 
Introdução aos Conceitos do WSO2 ESB
Introdução aos Conceitos do WSO2 ESBIntrodução aos Conceitos do WSO2 ESB
Introdução aos Conceitos do WSO2 ESBEdgar Silva
 

Mais procurados (20)

Performance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsPerformance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.js
 
Middlewares ASP.NET
Middlewares ASP.NETMiddlewares ASP.NET
Middlewares ASP.NET
 
ASP.NET 5, MVC 6 e além
ASP.NET 5, MVC 6 e alémASP.NET 5, MVC 6 e além
ASP.NET 5, MVC 6 e além
 
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
 
Dicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.x
Dicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.xDicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.x
Dicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.x
 
Novidades do ASP.NET 5.X
Novidades do ASP.NET 5.XNovidades do ASP.NET 5.X
Novidades do ASP.NET 5.X
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
Asp.net web api
Asp.net web apiAsp.net web api
Asp.net web api
 
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?
 
.NET Core + MongoDB + Selenium: extração de dados de páginas Web - Databases SP
.NET Core + MongoDB + Selenium: extração de dados de páginas Web - Databases SP.NET Core + MongoDB + Selenium: extração de dados de páginas Web - Databases SP
.NET Core + MongoDB + Selenium: extração de dados de páginas Web - Databases SP
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
 
Introdução ao Nodejs
Introdução ao NodejsIntrodução ao Nodejs
Introdução ao Nodejs
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Instalação CakePHP 2.2.3
Instalação CakePHP 2.2.3Instalação CakePHP 2.2.3
Instalação CakePHP 2.2.3
 
ASP.NET Core 2.1 #dotnetconf
ASP.NET Core 2.1 #dotnetconfASP.NET Core 2.1 #dotnetconf
ASP.NET Core 2.1 #dotnetconf
 
Guia do F12: Chrome Developer Tools
Guia do F12: Chrome Developer ToolsGuia do F12: Chrome Developer Tools
Guia do F12: Chrome Developer Tools
 
Microservices com ASP.NET 5
Microservices com ASP.NET 5Microservices com ASP.NET 5
Microservices com ASP.NET 5
 
Introdução aos Conceitos do WSO2 ESB
Introdução aos Conceitos do WSO2 ESBIntrodução aos Conceitos do WSO2 ESB
Introdução aos Conceitos do WSO2 ESB
 
ASP.NET vNext – MVC6
ASP.NET vNext – MVC6ASP.NET vNext – MVC6
ASP.NET vNext – MVC6
 

Destaque

Produção colaborativa de conteúdos em sistemas wiki
Produção colaborativa de conteúdos em sistemas wikiProdução colaborativa de conteúdos em sistemas wiki
Produção colaborativa de conteúdos em sistemas wikiCarlos d'Andréa
 
SimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas OperacionaisSimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas OperacionaisCaio Ribeiro Pereira
 
Certificação Red Hat
Certificação Red HatCertificação Red Hat
Certificação Red HatRed Hat
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Luciano Ramalho
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Meteor um overview sobre a plataforma
Meteor   um overview sobre a plataformaMeteor   um overview sobre a plataforma
Meteor um overview sobre a plataformaCaio Ribeiro Pereira
 
Defesa da tese de doutorado
Defesa da tese de doutoradoDefesa da tese de doutorado
Defesa da tese de doutoradoCarlos d'Andréa
 

Destaque (16)

Produção colaborativa de conteúdos em sistemas wiki
Produção colaborativa de conteúdos em sistemas wikiProdução colaborativa de conteúdos em sistemas wiki
Produção colaborativa de conteúdos em sistemas wiki
 
SimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas OperacionaisSimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas Operacionais
 
Certificação Red Hat
Certificação Red HatCertificação Red Hat
Certificação Red Hat
 
Boas práticas de API Design
Boas práticas de API DesignBoas práticas de API Design
Boas práticas de API Design
 
Wiki-wiki S/A
Wiki-wiki S/AWiki-wiki S/A
Wiki-wiki S/A
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)
 
Meteor ddp
Meteor ddpMeteor ddp
Meteor ddp
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Meteor um overview sobre a plataforma
Meteor   um overview sobre a plataformaMeteor   um overview sobre a plataforma
Meteor um overview sobre a plataforma
 
JavaScript Hacks
JavaScript HacksJavaScript Hacks
JavaScript Hacks
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
 
Node js
Node jsNode js
Node js
 
Javascript nos dias de hoje
Javascript nos dias de hojeJavascript nos dias de hoje
Javascript nos dias de hoje
 
Node js - Javascript Server Side
Node js - Javascript Server SideNode js - Javascript Server Side
Node js - Javascript Server Side
 
Conhecendo mundo Node.js
Conhecendo mundo Node.jsConhecendo mundo Node.js
Conhecendo mundo Node.js
 
Defesa da tese de doutorado
Defesa da tese de doutoradoDefesa da tese de doutorado
Defesa da tese de doutorado
 

Semelhante a Aplicações de tempo real com Meteor.js

Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stackSidney Roberto
 
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Ramon Durães
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptAndre Baltieri
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-ptPedro Sousa
 
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)Aryel Tupinambá
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'C. Augusto Proiete
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnapAndreano Lanusse
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - IntroduçãoMarco Pinheiro
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSMatheus Donizete
 
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRSAplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRSJackson F. de A. Mafra
 
Introdução ao AWS Database Migration Service
Introdução ao AWS Database Migration ServiceIntrodução ao AWS Database Migration Service
Introdução ao AWS Database Migration ServiceAmazon Web Services LATAM
 
12b windows server-2008_r2_overview-brz - julio
12b   windows server-2008_r2_overview-brz - julio12b   windows server-2008_r2_overview-brz - julio
12b windows server-2008_r2_overview-brz - julioProf Anderson Favaro
 
Win server 2008_r2_visao_geral
Win server 2008_r2_visao_geralWin server 2008_r2_visao_geral
Win server 2008_r2_visao_geralReginaldo Santos
 
Apresentando o Windows Server 2008 R2
Apresentando o Windows Server 2008 R2Apresentando o Windows Server 2008 R2
Apresentando o Windows Server 2008 R2Rodrigo Immaginario
 

Semelhante a Aplicações de tempo real com Meteor.js (20)

Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stack
 
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScript
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
 
Fundamentos de arquitetura Web
Fundamentos de arquitetura WebFundamentos de arquitetura Web
Fundamentos de arquitetura Web
 
Java 16 Jdbc
Java 16 JdbcJava 16 Jdbc
Java 16 Jdbc
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnap
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JS
 
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRSAplicações Realtime em Android | Fisl 15 | GuMobileRS
Aplicações Realtime em Android | Fisl 15 | GuMobileRS
 
Introdução ao AWS Database Migration Service
Introdução ao AWS Database Migration ServiceIntrodução ao AWS Database Migration Service
Introdução ao AWS Database Migration Service
 
12b windows server-2008_r2_overview-brz - julio
12b   windows server-2008_r2_overview-brz - julio12b   windows server-2008_r2_overview-brz - julio
12b windows server-2008_r2_overview-brz - julio
 
Win server 2008_r2_visao_geral
Win server 2008_r2_visao_geralWin server 2008_r2_visao_geral
Win server 2008_r2_visao_geral
 
Apresentando o Windows Server 2008 R2
Apresentando o Windows Server 2008 R2Apresentando o Windows Server 2008 R2
Apresentando o Windows Server 2008 R2
 

Aplicações de tempo real com Meteor.js