Каждое обновление страницы, создается экземпляр функции checkChat, а когда успешно проходит функция putMessage, вызывается событие push, которое и ожидается в checkChat, а т.к экземлпяров ее уже хранится дохера, он и пытается отправить ответ много раз.
Всм в базе данных ?! Я посылаю запрос на сервер, вызывается функция которая принимает req, а дальнейший алгоритм работы зависит от обработчика события, которое может в любой момент вызваться. т.е функция хранит в себе request, пока не выполнится некоторое событие. После срабатывания обработчика, я отправляю ответ на этот запрос, но может случится такое что запрос на клиенте уже оборван, и получается он отправляет ответ в пустоту.
TechNOIR: когда ты вводишь в обычный бокс текст, он не будет понимать переносы, ему явно нужно указать что тут я хочу сделать перенос. А что бы на выходе было так же как и на входе, тебе нужно использовать специальный редактор, который я назвал в своем ответе.
А вообще, JS'кой определяешь время пользователя ( если конечно у него оно верно настроено ) и сравниваешь со временем сервера. От сюда и будешь отталкиваться, сколько прибавлять, сколько отнимать.