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>
Código Javascript:
Ver original
var xmlhttp = function() * * { * * * * var a;try{a = new XMLHttpRequest();} * * * * catch(e){try{a = new ActiveXObject('Msxml2.XMLHTTP');} * * * * catch(e){try{a = new ActiveXObject('Microsoft.XMLHTTP');} * * * * catch(e){alert('Your browser doesn\'t support ajax');a=false;} * * * * }}return a; * * }; * * window.onload = function() * * { * * * * var a = new comet(); * * }; * * var comet = function() * * { * * * * var a = new xmlhttp(); * * * * a.open('post',window.location+"?"+Math.random()+"="+Math.random(), true); * * * * a.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); * * * * a.onreadystatechange = function() * * * * { * * * * * * if(a.readyState == 4) * * * * * * { * * * * * * * * document.getElementById('content').innerHTML = a.responseText; * * * * * * } * * * * }; * * * * a.send('algo=algo'); * * };
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!