Buenas:
Te resumo un poco lo que he visto por internet:
1. AJAX Long-Polling: Es una tecnica como comenta xve de enviar cada cierto tiempo una pregunta al servidor. lo que se busca aqui es tener una conexion siempre con el servidor hasta antes de que caduque por exeder el tiempo maximo de ejecucion de la funcion. El servidor puede o no responder dependiendo de si tiene tu respuesta o no. Ya te digo que lo que se trata es tener una conexion abierta con el servidor basada en ajax. Ya ves que muy eficiente no es pero fue una solucion en su momento y puede seguirlo siendo segun para que casos.
2. Server Sent Events: Esto debe venir de standard con el html5 por lo que he podido ver, tienes soporte en casi todo los navegadores (IE explorer por lo visto no). Aqui tienes unos ejemplo de uso:
http://www.w3schools.com/html/html5_serversentevents.asp. El cliente tambien envia repetidas peticiones al servidor cada cierto tiempo pero ya no las manejas tu sino que son parte del navegador. Tu solo te ocupas de abrir la conexion y esperar recibir los mensajes cada cierto tiempo.
3. Websockets: Parecido al anterior y aqui tienes la tabla de soporte del navegador
http://caniuse.com/#feat=websockets. Parecido al anterior, la diferencia es que la comunicación es por puertos (sockets) y no llamando a una pagina en php/asp/jsp... Para este caso tienes que hacer uso de node.js o algun lenguaje en el que puedas mantener un socket abierto a la espera (se puede hacer en php por que he visto demostraciones pero no lo he probado).
Todo esto, anterior a html5, lo encontraras llamado muchas veces como "comet" fueron formas usadas de una manera u otra para lograr lo que quieres.
Decir también que twitter hace uso de Websockets por lo que he leído.
Espero que sirva.
Saludos.