Läuft bei mir so:
Du postest (mit oder ohne Inhalt):
Refresh in 10, 20, 40, 80, 160 ... max 2^12 Sekunden.
Grund. Refreshes finden ja statt ob ich auf das Chatfenster starre oder meinen Fokus auf einer anderen Seite habe.
Wenn ich mich wieder dem Chat widmen will poste ich einfach einen leeren Beitrag um den Refresh wieder bei 10 s zu starten.
Theoretisch müsste man den Timeout umgehen können und permanent eine Art HTTP Stream aufrecht erhalten, welcher dann direkt angezeigt wird oder von JS ausgewertet wird. Wenn das Fenster geschlossen wird, bekommt PHP ein Event der Ihm sagt, das der Request abgebrochen wurde.
Ich bin der Meinung soetwas mal gelesen zu haben, finde leider aber kein Link dazu in meiner Sammlung.