на вскидку: с клиента летит запрос раз в 5 секунд с номером сообщения которое сейчас последнее. Сервер проверяет номер сообщения и возвращает все новее сообщения.
Для этого серверу нужно для каждого чата хранить всю историю сообщений в памяти/DB и сопоставлять их на каждый ajax пинг, чтобы у клиента была актуальные данные.
Дмитрий: повторюсь - ajax не полнодуплексный канал связи. Кроме нагрузки на канал усложняется логика чата. Как определить, что клиент отвалился? Ждать на сервере, когда от него перестанут приходить ajax пинги? Или как ему срочно доставить пакет с ответом другого клиента, не дожидаясь пинга?