SlideShare une entreprise Scribd logo
1  sur  64
 
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
 
Para falar sobre COMET precisamos antes entender como uma comunicação Ajax funciona; Entender como os conceitos são aplicados; E quais os conceitos aplicados;
[object Object],[object Object],[object Object],[object Object]
Polling – (Ativo) Quando o navegador(cliente) faz pedidos ao servidor em intervalos regulares e freqüentes. Gerando assim um tráfico extra e pesado na rede.
Servidor você tem alguma atualização pra mim ? SIM   NÃO  
Piggyback – (Passivo) O servidor tendo alguma atualização para o cliente aguarda até que o cliente faça uma nova solicitação, então ele “aproveita” para enviar juntamente com a respostas do cliente a sua atualização. Não gera tráfego extra, em contra partida é muito demorado.
Tenho refrigerante ! Servidor me dê um sanduíche. Receba seu sanduíche e  refrigerante.
 
Comet – (Ativo) O servidor fica responsável em atualizar a qualquer momento o cliente. Uma única conexão é aberta e mantida pelo servidor.
[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
2. Long polling O navegador faz um pedido para o servidor, que é mantido em aberto até que o servidor tenha novos dados a ser enviado.  Após enviar um evento, o servidor encerra a conexão e imediatamente o navegador abre uma nova.
Seja qual for a técnica, o servidor é capaz de enviar novas informações com baixa latência; Streaming é considerado de melhor desempenho  comparado ao Long Polling;
Opa, tenho novas atualizações ! Navegador receba novas atualizações.
 
 
Uma aplicação utilizando COMET pode entregar os  dados para o cliente a qualquer momento, não  apenas na resposta às informações fornecidas  pelo usuário(navegador).
 
Programas de Chat: Gmail, Meebo, Yahoo etc.
Gmail usa para atualizar as conversas por email;
Google Docs usa para exibir as ações de outros  colaboradores; Gpokr para jogos on-line; Linkedin, Polar Rose... Dentre outros...
 
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
 
O COMET pode ser utilizado em vários tipos de  ambientes e plataformas compatíveis. Mas existem determinados frameworks e  servidores que tem uma integração maior com ele; Essa integração pode ser em forma de facilidade  na codificação, performance dos métodos e  facilidade de implementar.
Temos N frameworks e API´s que trabalham com  COMET, mas alguns se destacam por todos os  parâmetros citados anteriormente. Jetty, DWR e COMETD(Bayeux) são os que mais  possuem benefícios para esse método;
 
Dojo client implementation dojox.cometd.init( serverUrl ); dojox.cometd.publish (“/topic”,   {/* payload */} ); dojox.cometd.subscribe( “/topic” ,  function(){/* ... /* } );
package dojox.cometd; public interface Bayeux { void publish(Client formClient, String toChannel, Object data, String idMsg); void subscribe(String toChannel, Client subscriber); ... }
Collection sessions = context.getScriptSessionsByPage(url); ScriptProxy proxy = new ScriptProxy(sessions); proxy.addFunctionCall( “updateCallers” , call);
Collection sessions = context.getScriptSessionsByPage(url); Effect e = new Effect(sessions); e.fade( “clientId” );
Collection sessions = context.getScriptSessionsByPage(url); Server server = GI.getServer(sessions,  “appname” ); Button button = server.getJSXById( “button” , Button.class); Button.setEnabled(Form.STATEDISABLED, true);
<p> Conta corrente: <span  id =“ contaID ”> </span> <p> import  org.directwebremoting.dwr.Util; Util.setValue(“ contaID ”, 100);
import  org...scriptaculous.Effect; Effect.shake(“ contaID ”, 100); <p> Conta corrente: <span  id =“ contaID ”> </span> <p>
import  jsx3.gui.*; Server s = GI.getServer(“app”); Button b = s.getJSXById(“ id ”, Button.class); b.setEnabled(Form.STATEDISABLED, true); <p> Conta corrente: <span  id =“ contaID ”> </span> <p>
import  org.dojotoolkit.dijit.Dijit; import  org.dojotoolkit.dijit.Editor; Editor e = Dijit.byId(“ contaID ”, Editor.class); e.setValue(200); <p> Conta corrente: <span  id =“ contaID ”> </span> <p>
 
Algumas pessoas fazem essa pergunta: Comet é a mesma coisa de Reverse Ajax ? A resposta é: SIM. O DWR chama a técnica de Comet de Reverse Ajax, e ele utiliza também o Polling e Piggyback. Ele consegue detectar de forma transparente qual tipo de interação por ajax que o cliente está utilizando, deixando transparente para o programador.
 
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Para ativar o Reverse Ajax na sua aplicação, é muito simples. São apenas dois passos: 1. Basta acrescentar o treco de código no seu web.xml. Com isso você ativa o Reverse Ajax.
2. Depois de ativado no web.xml, agora no segundo passo você vai definir qual a página que vai se utilizar do Reverse Ajax. Basta acrescentar na sua página a seguinte linha de código: Você poderá adicionar no  onload  da página ou no início de um arquivo JS, ou apenas como Script na página.
Este é o modo padrão quando o Reverse Ajax é ativado para  as versões 2.0.3 e anteriores.  A partir da versão 2.0.4 o padrão é a Early Closing. Ele tem como características respostas mais rápidas,  porque ele fecha a conexão apenas uma vez a cada 60  segundos, ou verifica se o browser ainda está ativo.
Para ativar o modo Full Streaming na versão DWR 2.0.4 em  diante, basta seguir as configurações: No web.xml ative o uso de Reverse Ajax.
Ainda no web.xml adicione o seguinte trecho. Depois basta acrescentar na sua página a seguinte linha de código:
No modo Early Closing ele irá manter a conexão aberta  assim como na Full Streaming, no entanto ele ocupa apenas  a conexão durante 60 segundos, se não houver uma saída  para o navegador. Esse modo nas versões DWR 2.0.4 e superiores, não se faz  necessária nenhuma configuração adicional.  Para as versões 2.0.3 para baixo é preciso adicionar o  seguinte trecho.
Neste caso o DWR irá manter a conexão aberta por mais de  500 milissegundos após a primeira saída, depois ele fecha e  já solicita o a sua reabertura. Ele faz isso antes de forçar um  flush.
Caso este modo esteja sendo utilizado em aplicações com  um elevada taxa de transferência de dados(servidor-cliente)  se faz necessário em alguns casos aumentar o tempo de  conexão aberta com o servidor. Bastando alterar o valor no maxWaitAfterWrite = 1000 ou  Mais, dependendo da sua necessidade.
Se por algum motivo você deseje utilizar essa técnica,  também é bem simples configurar. Além da configuração padrão:  web.xml(activeReverseAjaxEnabled=true) é preciso  adicionar dois init-params, veja a seguir:
Você deve definir o PollingServerLoadMonitor. No modo Polling o default é de 5 segundos, mas é  recomendado que você altere esse valor, pelo menos para 60  segundos. Isso para as versões DWR 2.0.3 em diante.
 
Neste exemplo iremos simular um chat simples. Apenas para exemplificar o uso do Reverse Ajax com DWR e  ver como é simples o seu uso.
 
No exemplo a seguir vamos ver um exemplo de um relógio  que servirá para qualquer usuário conectado ao servidor.
 
No exemplo a seguir, vou demonstrar mais uma utilidade para o Reverse Ajax com DWR. Não teremos nenhuma validação, iremos acessar dois  browser(IE e Firefox) e mostrar o seu funcionamento.
 
Como vimos o DWR tem um excelente suporte a Reverse  Ajax(Comet) em geral. Bem simples de se utilizar, fácil de  configurar e robusto. O DWR 3.0 promete muito mais, com novas features,  suporte a Rest, melhor integração com Spring, suporte ao  Google Gears e Dojo Offline,Aptana Jaxer, OpenAjax,  PubSub, Bayeux etc.
 

Contenu connexe

Tendances

Brutos Framework (Java WEB MVC)
Brutos Framework (Java WEB MVC)Brutos Framework (Java WEB MVC)
Brutos Framework (Java WEB MVC)Afonso Brandão
 
Novidades do ASP.NET Core 2.1
Novidades do ASP.NET Core 2.1Novidades do ASP.NET Core 2.1
Novidades do ASP.NET Core 2.1Rodrigo Kono
 
pfSense - Proxy autenticado e regras no SquidGuard
pfSense - Proxy autenticado e regras no SquidGuardpfSense - Proxy autenticado e regras no SquidGuard
pfSense - Proxy autenticado e regras no SquidGuardCavalcante Treinamentos
 
XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendadoricardophp
 
Desenvolvimento web seguro cookies - Rodolfo Stangherlin
Desenvolvimento web seguro cookies - Rodolfo StangherlinDesenvolvimento web seguro cookies - Rodolfo Stangherlin
Desenvolvimento web seguro cookies - Rodolfo StangherlinTchelinux
 
ASP.NET WebForms x ASP.NET MVC
ASP.NET WebForms x ASP.NET MVCASP.NET WebForms x ASP.NET MVC
ASP.NET WebForms x ASP.NET MVCFelipe Pimentel
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPFlavio Souza
 
Qualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQuality Press
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAYelken Heckman Ferreira Gonzales
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
React - Biblioteca Javascript para criação de UI
React - Biblioteca Javascript para criação de UIReact - Biblioteca Javascript para criação de UI
React - Biblioteca Javascript para criação de UICleiton Francisco
 
Curso De flask Criando Website - Introdução
Curso De flask Criando Website - IntroduçãoCurso De flask Criando Website - Introdução
Curso De flask Criando Website - IntroduçãoMarcus Pereira
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFRafael Ponte
 
Aprendendo a criar plugins para o Wordpress - Richard Barros
Aprendendo a criar plugins para o Wordpress - Richard BarrosAprendendo a criar plugins para o Wordpress - Richard Barros
Aprendendo a criar plugins para o Wordpress - Richard BarrosRichard Barros
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonPaula Grangeiro
 
Tutorial WebSocket em Java
Tutorial WebSocket em JavaTutorial WebSocket em Java
Tutorial WebSocket em Javalucascsoliveira
 

Tendances (20)

Brutos Framework (Java WEB MVC)
Brutos Framework (Java WEB MVC)Brutos Framework (Java WEB MVC)
Brutos Framework (Java WEB MVC)
 
Novidades do ASP.NET Core 2.1
Novidades do ASP.NET Core 2.1Novidades do ASP.NET Core 2.1
Novidades do ASP.NET Core 2.1
 
pfSense - Proxy autenticado e regras no SquidGuard
pfSense - Proxy autenticado e regras no SquidGuardpfSense - Proxy autenticado e regras no SquidGuard
pfSense - Proxy autenticado e regras no SquidGuard
 
XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendado
 
Testando Tomcat Com Netbeans
Testando Tomcat Com NetbeansTestando Tomcat Com Netbeans
Testando Tomcat Com Netbeans
 
Desenvolvimento web seguro cookies - Rodolfo Stangherlin
Desenvolvimento web seguro cookies - Rodolfo StangherlinDesenvolvimento web seguro cookies - Rodolfo Stangherlin
Desenvolvimento web seguro cookies - Rodolfo Stangherlin
 
Tutorial De Instalação Do Tomcat
Tutorial De Instalação Do TomcatTutorial De Instalação Do Tomcat
Tutorial De Instalação Do Tomcat
 
ASP.NET WebForms x ASP.NET MVC
ASP.NET WebForms x ASP.NET MVCASP.NET WebForms x ASP.NET MVC
ASP.NET WebForms x ASP.NET MVC
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHP
 
Qualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHP
 
Introdução - Java WEB
Introdução - Java WEBIntrodução - Java WEB
Introdução - Java WEB
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
 
Criando cliente com wsimport
Criando cliente com wsimportCriando cliente com wsimport
Criando cliente com wsimport
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
React - Biblioteca Javascript para criação de UI
React - Biblioteca Javascript para criação de UIReact - Biblioteca Javascript para criação de UI
React - Biblioteca Javascript para criação de UI
 
Curso De flask Criando Website - Introdução
Curso De flask Criando Website - IntroduçãoCurso De flask Criando Website - Introdução
Curso De flask Criando Website - Introdução
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSF
 
Aprendendo a criar plugins para o Wordpress - Richard Barros
Aprendendo a criar plugins para o Wordpress - Richard BarrosAprendendo a criar plugins para o Wordpress - Richard Barros
Aprendendo a criar plugins para o Wordpress - Richard Barros
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em python
 
Tutorial WebSocket em Java
Tutorial WebSocket em JavaTutorial WebSocket em Java
Tutorial WebSocket em Java
 

Similaire à Comet - ReverseAjax com DWR - Resumo

Melhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação WebMelhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação WebMaurício Linhares
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de MicroservicesDeep Tech Brasil
 
Comunicação em Tempo Real com ASP.Net SignalR
Comunicação em Tempo Real com ASP.Net SignalRComunicação em Tempo Real com ASP.Net SignalR
Comunicação em Tempo Real com ASP.Net SignalREduardo Pires
 
02 - Fundamentos de Servlets
02 - Fundamentos de Servlets02 - Fundamentos de Servlets
02 - Fundamentos de ServletsMarcio Marinho
 
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
 
Projeto jorge,jefff, matheus
Projeto   jorge,jefff, matheusProjeto   jorge,jefff, matheus
Projeto jorge,jefff, matheusEadanalise
 
Abrindo a caixa de ferramentas: atirando pedras com Jmeter
Abrindo a caixa de ferramentas: atirando pedras com JmeterAbrindo a caixa de ferramentas: atirando pedras com Jmeter
Abrindo a caixa de ferramentas: atirando pedras com JmeterEvandro Grezeli
 
Configurando o RM Multi Tenancy.pdf
Configurando o RM Multi Tenancy.pdfConfigurando o RM Multi Tenancy.pdf
Configurando o RM Multi Tenancy.pdfAristidesLima4
 
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
 
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010Rodrigo Kono
 
Servlet jsp tomcat 8
Servlet jsp tomcat 8Servlet jsp tomcat 8
Servlet jsp tomcat 8maxrosan
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaBreno Vitorino
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoiMasters
 
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereCriando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereJuliano Martins
 

Similaire à Comet - ReverseAjax com DWR - Resumo (20)

Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
Melhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação WebMelhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação Web
 
Mod06 licao01-apostila
Mod06 licao01-apostilaMod06 licao01-apostila
Mod06 licao01-apostila
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
 
Comunicação em Tempo Real com ASP.Net SignalR
Comunicação em Tempo Real com ASP.Net SignalRComunicação em Tempo Real com ASP.Net SignalR
Comunicação em Tempo Real com ASP.Net SignalR
 
02 - Fundamentos de Servlets
02 - Fundamentos de Servlets02 - Fundamentos de Servlets
02 - Fundamentos de Servlets
 
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
 
Projeto jorge,jefff, matheus
Projeto   jorge,jefff, matheusProjeto   jorge,jefff, matheus
Projeto jorge,jefff, matheus
 
Abrindo a caixa de ferramentas: atirando pedras com Jmeter
Abrindo a caixa de ferramentas: atirando pedras com JmeterAbrindo a caixa de ferramentas: atirando pedras com Jmeter
Abrindo a caixa de ferramentas: atirando pedras com Jmeter
 
Configurando o RM Multi Tenancy.pdf
Configurando o RM Multi Tenancy.pdfConfigurando o RM Multi Tenancy.pdf
Configurando o RM Multi Tenancy.pdf
 
Python CGI
Python CGIPython CGI
Python CGI
 
Web Services
Web ServicesWeb Services
Web Services
 
Websocket com PHP
Websocket com PHPWebsocket com PHP
Websocket com PHP
 
Daw slide 06
Daw slide 06Daw slide 06
Daw slide 06
 
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
 
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
 
Servlet jsp tomcat 8
Servlet jsp tomcat 8Servlet jsp tomcat 8
Servlet jsp tomcat 8
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em Java
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimento
 
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereCriando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
 

Comet - ReverseAjax com DWR - Resumo

  • 1.  
  • 2.
  • 3.
  • 4.  
  • 5. Para falar sobre COMET precisamos antes entender como uma comunicação Ajax funciona; Entender como os conceitos são aplicados; E quais os conceitos aplicados;
  • 6.
  • 7. Polling – (Ativo) Quando o navegador(cliente) faz pedidos ao servidor em intervalos regulares e freqüentes. Gerando assim um tráfico extra e pesado na rede.
  • 8. Servidor você tem alguma atualização pra mim ? SIM  NÃO 
  • 9. Piggyback – (Passivo) O servidor tendo alguma atualização para o cliente aguarda até que o cliente faça uma nova solicitação, então ele “aproveita” para enviar juntamente com a respostas do cliente a sua atualização. Não gera tráfego extra, em contra partida é muito demorado.
  • 10. Tenho refrigerante ! Servidor me dê um sanduíche. Receba seu sanduíche e refrigerante.
  • 11.  
  • 12. Comet – (Ativo) O servidor fica responsável em atualizar a qualquer momento o cliente. Uma única conexão é aberta e mantida pelo servidor.
  • 13.
  • 14.
  • 15. 2. Long polling O navegador faz um pedido para o servidor, que é mantido em aberto até que o servidor tenha novos dados a ser enviado. Após enviar um evento, o servidor encerra a conexão e imediatamente o navegador abre uma nova.
  • 16. Seja qual for a técnica, o servidor é capaz de enviar novas informações com baixa latência; Streaming é considerado de melhor desempenho comparado ao Long Polling;
  • 17. Opa, tenho novas atualizações ! Navegador receba novas atualizações.
  • 18.  
  • 19.  
  • 20. Uma aplicação utilizando COMET pode entregar os dados para o cliente a qualquer momento, não apenas na resposta às informações fornecidas pelo usuário(navegador).
  • 21.  
  • 22. Programas de Chat: Gmail, Meebo, Yahoo etc.
  • 23. Gmail usa para atualizar as conversas por email;
  • 24. Google Docs usa para exibir as ações de outros colaboradores; Gpokr para jogos on-line; Linkedin, Polar Rose... Dentre outros...
  • 25.  
  • 26.
  • 27.
  • 28.
  • 29.  
  • 30. O COMET pode ser utilizado em vários tipos de ambientes e plataformas compatíveis. Mas existem determinados frameworks e servidores que tem uma integração maior com ele; Essa integração pode ser em forma de facilidade na codificação, performance dos métodos e facilidade de implementar.
  • 31. Temos N frameworks e API´s que trabalham com COMET, mas alguns se destacam por todos os parâmetros citados anteriormente. Jetty, DWR e COMETD(Bayeux) são os que mais possuem benefícios para esse método;
  • 32.  
  • 33. Dojo client implementation dojox.cometd.init( serverUrl ); dojox.cometd.publish (“/topic”, {/* payload */} ); dojox.cometd.subscribe( “/topic” , function(){/* ... /* } );
  • 34. package dojox.cometd; public interface Bayeux { void publish(Client formClient, String toChannel, Object data, String idMsg); void subscribe(String toChannel, Client subscriber); ... }
  • 35. Collection sessions = context.getScriptSessionsByPage(url); ScriptProxy proxy = new ScriptProxy(sessions); proxy.addFunctionCall( “updateCallers” , call);
  • 36. Collection sessions = context.getScriptSessionsByPage(url); Effect e = new Effect(sessions); e.fade( “clientId” );
  • 37. Collection sessions = context.getScriptSessionsByPage(url); Server server = GI.getServer(sessions, “appname” ); Button button = server.getJSXById( “button” , Button.class); Button.setEnabled(Form.STATEDISABLED, true);
  • 38. <p> Conta corrente: <span id =“ contaID ”> </span> <p> import org.directwebremoting.dwr.Util; Util.setValue(“ contaID ”, 100);
  • 39. import org...scriptaculous.Effect; Effect.shake(“ contaID ”, 100); <p> Conta corrente: <span id =“ contaID ”> </span> <p>
  • 40. import jsx3.gui.*; Server s = GI.getServer(“app”); Button b = s.getJSXById(“ id ”, Button.class); b.setEnabled(Form.STATEDISABLED, true); <p> Conta corrente: <span id =“ contaID ”> </span> <p>
  • 41. import org.dojotoolkit.dijit.Dijit; import org.dojotoolkit.dijit.Editor; Editor e = Dijit.byId(“ contaID ”, Editor.class); e.setValue(200); <p> Conta corrente: <span id =“ contaID ”> </span> <p>
  • 42.  
  • 43. Algumas pessoas fazem essa pergunta: Comet é a mesma coisa de Reverse Ajax ? A resposta é: SIM. O DWR chama a técnica de Comet de Reverse Ajax, e ele utiliza também o Polling e Piggyback. Ele consegue detectar de forma transparente qual tipo de interação por ajax que o cliente está utilizando, deixando transparente para o programador.
  • 44.  
  • 45.
  • 46. Para ativar o Reverse Ajax na sua aplicação, é muito simples. São apenas dois passos: 1. Basta acrescentar o treco de código no seu web.xml. Com isso você ativa o Reverse Ajax.
  • 47. 2. Depois de ativado no web.xml, agora no segundo passo você vai definir qual a página que vai se utilizar do Reverse Ajax. Basta acrescentar na sua página a seguinte linha de código: Você poderá adicionar no onload da página ou no início de um arquivo JS, ou apenas como Script na página.
  • 48. Este é o modo padrão quando o Reverse Ajax é ativado para as versões 2.0.3 e anteriores. A partir da versão 2.0.4 o padrão é a Early Closing. Ele tem como características respostas mais rápidas, porque ele fecha a conexão apenas uma vez a cada 60 segundos, ou verifica se o browser ainda está ativo.
  • 49. Para ativar o modo Full Streaming na versão DWR 2.0.4 em diante, basta seguir as configurações: No web.xml ative o uso de Reverse Ajax.
  • 50. Ainda no web.xml adicione o seguinte trecho. Depois basta acrescentar na sua página a seguinte linha de código:
  • 51. No modo Early Closing ele irá manter a conexão aberta assim como na Full Streaming, no entanto ele ocupa apenas a conexão durante 60 segundos, se não houver uma saída para o navegador. Esse modo nas versões DWR 2.0.4 e superiores, não se faz necessária nenhuma configuração adicional. Para as versões 2.0.3 para baixo é preciso adicionar o seguinte trecho.
  • 52. Neste caso o DWR irá manter a conexão aberta por mais de 500 milissegundos após a primeira saída, depois ele fecha e já solicita o a sua reabertura. Ele faz isso antes de forçar um flush.
  • 53. Caso este modo esteja sendo utilizado em aplicações com um elevada taxa de transferência de dados(servidor-cliente) se faz necessário em alguns casos aumentar o tempo de conexão aberta com o servidor. Bastando alterar o valor no maxWaitAfterWrite = 1000 ou Mais, dependendo da sua necessidade.
  • 54. Se por algum motivo você deseje utilizar essa técnica, também é bem simples configurar. Além da configuração padrão: web.xml(activeReverseAjaxEnabled=true) é preciso adicionar dois init-params, veja a seguir:
  • 55. Você deve definir o PollingServerLoadMonitor. No modo Polling o default é de 5 segundos, mas é recomendado que você altere esse valor, pelo menos para 60 segundos. Isso para as versões DWR 2.0.3 em diante.
  • 56.  
  • 57. Neste exemplo iremos simular um chat simples. Apenas para exemplificar o uso do Reverse Ajax com DWR e ver como é simples o seu uso.
  • 58.  
  • 59. No exemplo a seguir vamos ver um exemplo de um relógio que servirá para qualquer usuário conectado ao servidor.
  • 60.  
  • 61. No exemplo a seguir, vou demonstrar mais uma utilidade para o Reverse Ajax com DWR. Não teremos nenhuma validação, iremos acessar dois browser(IE e Firefox) e mostrar o seu funcionamento.
  • 62.  
  • 63. Como vimos o DWR tem um excelente suporte a Reverse Ajax(Comet) em geral. Bem simples de se utilizar, fácil de configurar e robusto. O DWR 3.0 promete muito mais, com novas features, suporte a Rest, melhor integração com Spring, suporte ao Google Gears e Dojo Offline,Aptana Jaxer, OpenAjax, PubSub, Bayeux etc.
  • 64.