Lo más fácil, loong polling.
Una consulta se envía al servidor, si éste no tiene datos, "duerme" un tiempo para volver a consultar. Cuando haya datos, devuelve la consulta.
Tengo un chat implementado así:
cliente js hace una llamada ajax al servidor, el servidor recibe la petición y hace algo como esto:
Código PHP:
Ver originalset_time_out(215);//permitimos que el proceso tarde en responder.
$x=0;
while($x<70){//ejecutamos hasta 70 veces este proceso.
if($datos=hay_datos())//si hay datos
return $datos;//regresamos datos, el cliente los recibe y hace otra llamada
sleep(3);//si no hay datos, dormimos 3 segundos $x++;//aumentamos el contador, si no hubiera datos, se hará el ciclo 70*3= 210 segundos
}
return $vacio;//luego de 210 seg. regresamos la llamada vacía para que no caiga la conexión, y se haga otra petición.
Esto asegura un retardo máximo de tres segundos entre respuestas, y no satura al servidor de peticiones.