Foros del Web » Programando para Internet » Javascript » Frameworks JS »

comet, long polling

Estas en el tema de comet, long polling en el foro de Frameworks JS en Foros del Web. Hola, que tal? Tengo un codigo que saque de un post de este foro sobre comet: long polling, y queria saber mas o menos como ...
  #1 (permalink)  
Antiguo 28/09/2011, 22:22
Avatar de morfasto  
Fecha de Ingreso: julio-2011
Ubicación: Lima
Mensajes: 291
Antigüedad: 12 años, 9 meses
Puntos: 8
comet, long polling

Hola, que tal?

Tengo un codigo que saque de un post de este foro sobre comet: long polling, y queria saber mas o menos como es que funciona ya que tengo ciertas dudas.

Hice un sistema de notificaciones para mi pagina web y tengo varias opciones para actualizar la informacion, pero hay 2 que me llaman la atencion.

1. El setInterval de AJAX, puedo setearlo para que cada 10 segundos se actualice el div que contiene las notificaciones, pero al parecer esto podria ser un problema ya que si tengo 1000 usuarios que estan conectados a la misma vez, habrian 1000 peticiones haciendose cada 10 segundos y probablemente esto congestione terriblemente mi web.

2. Estuve averiguando y encontre que con comet: long polling, podria hacer que cada vez que se actualice la base de datos, se haga un refresh al div que contiene las notificaciones. De esta manera no se estarian haciendo refresh cada 10 segundos, sino que solo cuando se necesite. Este es el codigo que saque del post de ZiTAL http://www.forosdelweb.com/f127/ejemplo-comet-con-php-long-polling-681509/ , lo edite un poco para acomodarlo a lo que necesito:

notificaciones.php
Código PHP:
<?php 
if($_POST)   
{
    
set_time_limit(0);     
    
header("Edge-control: no-store"); 
    
sleep(1);  
    
session_start(); 
    
$link mysql_connect("localhost","usuario","contraseña");
    if (!
$link)
      {
      die(
'Could not connect: ' mysql_error());
      }

    
mysql_select_db("base_datos"$link);
    
$notificaciones "select notificacion from notificaciones where cliente_id=$_SESSION[cliente] order by fecha desc"
    
$notificaciones mysql_query($notificaciones$link);  
     
            while(
$rs=mysql_fetch_array($notificaciones))  
              {  
                echo   
$rs['notificacion'];
              }
    
mysql_close($link);    
    exit(); 
}
?>
<html>
<head>    
</head>
<body>
    <div id="content">Cargando...</div>
<script type="text/javascript" src="comet.js"></script>
</body>
</html>
comet.js
Código Javascript:
Ver original
  1. var xmlhttp = function()
  2. * * {
  3. * * * * var a;try{a = new XMLHttpRequest();}
  4. * * * * catch(e){try{a = new ActiveXObject('Msxml2.XMLHTTP');}
  5. * * * * catch(e){try{a = new ActiveXObject('Microsoft.XMLHTTP');}
  6. * * * * catch(e){alert('Your browser doesn\'t support ajax');a=false;}
  7. * * * * }}return a;
  8. * * };
  9. * * window.onload = function()
  10. * * {
  11. * * * * var a = new comet();
  12. * * };
  13. * * var comet = function()
  14. * * {
  15. * * * * var a = new xmlhttp();
  16. * * * * a.open('post',window.location+"?"+Math.random()+"="+Math.random(), true);
  17. * * * * a.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  18. * * * * a.onreadystatechange = function()
  19. * * * * {
  20. * * * * * * if(a.readyState == 4)
  21. * * * * * * {
  22. * * * * * * * * document.getElementById('content').innerHTML = a.responseText;
  23. * * * * * * }
  24. * * * * };
  25. * * * * a.send('algo=algo');
  26. * * };

Nose si este codigo haga un refresh al div cada vez que la base de datos cambie o simplemente hace un refresh cada segundo. De no ser asi, que es lo que debo de cambiar para que haga un refresh cada vez que la base de datos cambie en vez de hacerlo cada segundo.

Muchas gracias por su cooperacion!
  #2 (permalink)  
Antiguo 30/09/2011, 12:21
Avatar de morfasto  
Fecha de Ingreso: julio-2011
Ubicación: Lima
Mensajes: 291
Antigüedad: 12 años, 9 meses
Puntos: 8
Respuesta: comet, long polling

Alguien sabe de este tema?
  #3 (permalink)  
Antiguo 07/12/2011, 13:53
 
Fecha de Ingreso: diciembre-2011
Mensajes: 1
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: comet, long polling

Pues, veamos... por lo que eh entendido del comet con un ejemplo con el ajax de prototype, es que se mantiene el servidor en el estado 3 del ajax, "interactive", o al menos eso parece, lo que hace es utilizar flush y sleep en php para que no salga el error de time_limit y lee datos de un archivo... mientras que en javascript detecta "success" y cuando se detecta "complete" entonces dice que hay un error, y dentro de 5 segundos se reconecta... si no hay error se sigue conectando, y cada vez que envias un mensaje se actualiza al otro lado en el momento en el que lo envías, lo probé con google chrome con una ventana normal y una ventana incógnito

Aquí está el ejemplo:
http://www.zeitoun.net/articles/comet_and_php/start

Está casi al fiinal de la página

Etiquetas: ajax, comet, html, javascript, js, long, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:37.