Чем плох ajax чат?
Чтобы иметь актуальные данные, каждому клиенту нужно постоянно делать ajax обращение к серверу для синхронизации по таймауту. Это дает дополнительную нагрузку, да и отсутствует двухсторонняя связь. Сервер не может самовольно послать пакет клиенту.
Для чата лучше использовать WebSockets.
p.s. не понял пассаж про асинхронность, ajax тоже асинхронен.
Подумай, как в случае с AJAX сервер будет отдавать сообщения. 
В случае с websocket всё просто: список подключённых пользователей известен. Подключился новый пользователь, на сервере вызвался callback, соединение создалось и добавилось в список всех соединений. При получении сообщения от клиента сервер просто пройдёт в цикле по этому списку соединений, отправит данные и забудет про них. Пользователь отключился, вызвался callback, соединение удалилось из списка на сервере.
А как в случае AJAX? Сервер не знает, сколько пользователей активно в данный момент. Клиент отправил запрос, создалось соединение, запрос пришёл на сервер, сервер ответил на него, соединение разорвалось. Если юзер уйдёт с сайта, то сервер просто не будет получать запросы. Как он определит, ушёл ли юзер или просто таймаут ещё не сработал? Можно, конечно, на сервере хранить список с пользователями, которые что-то прислали и раз в N секунд выкидывать протухших. Но это дополнительная нагрузка на серв, который и так будет нагружен огромным количеством периодических запросов (выгоднее держать 1000 открытых соединений, чем раз в секунду открывать и закрывать по тысячи соединений). 
Вот тебе ещё простой пример: есть 3 пользователя. Один ничего не пишет и каждые 3 секунды отправляет запрос на получение сообщений. 2 других каждые полсекунды отправляют сообщения. Сервер может только догадываться, в сети ли необщительный юзер, или у него таймаут не вышел. А до тех пор, он хранит все сообщения от 2-го и 3-го пользователей. Но они уже получили сообщения друг от друга, поэтому надо где-то хранить инфу для каждого пользователя, какие сообщения он уже получал, а какие - нет. Можно, конечно, и сообщения хранить только некоторое время, и отправлять на клиент всё, что есть, а уже на клиенте пропускать дубликаты. Но это, опять же, доп. нагрузка на сервер и клиент.
В итоге, надо придумать довольно сложную логику хранения информации, которую надо отправить пользователям, да и список самих пользователей как-то хранить и мониторить. В итоге, куча малких запросов. которые будут просаживать сервер и нетривиальная система оповещений, которая, скорее всего, будет часто выдавать ошибки.