Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/09/2011, 22:22
Avatar de morfasto
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!