Comet(Long polling) — php + jquery?
js создает соединение (в опциях для ajax запроса выставляется таймаут побольше)
php принимает его и смотри что можно послать. И ждет... ждет пока не появятся данные которые можно послать.
Как только данные появляются (скажем скрипт с какой-то задержкой читает данные из базы или из очереди) то он отправляет эти данные и обрывает соединение.
js скрипт принимает данные, отдает данные на обработку и создает новое соединение.... и так до бесконечности.

По сути просто вместо того что бы опрашивать сервер раз в секунду, создается соединение, живущее только до получения данных. После получения данных соединение закрывается. После закрытия соединения (не важно пришли данные или произошла ошибка/разрыв по таймаут) так же создается новое. На практике таймаут выставляют секунд в 20-30 что бы избежать возможных проблем.
У меня не получается сразу получать новые данные - они приходят только после нового выполнения функции getmess, которая выполняется по истечению таймера, в чем может быть ошибка?
function getmess(){
$.ajax({
url:"get_mess.php", 
type:"POST",
data:{"id":id},
cahce:false,
timeout:30000,
async:true,
success:function(result){
  $("#response").html(result);
  setTimeout('getmess()',10000);
   }
 });
}
на сервере:
while(true){
$a=$_POST["id"];
$find_mess=(mysql_query("SELECT * FROM saymon WHERE id> '$a' "));
if (mysql_num_rows($find_mess)) {
		 while($row=mysql_fetch_array($find_mess)){
		 echo $row['mess']."";
		  }
		    flush();
                    exit;
		 }
		 sleep(5);
		 }
		mysql_close();