Мелкий пишет:вытягиваете всё появившееся после последнего сохранённого времени в сессии
Я бы предложил вариант не с UNIXTIME - каждое сообщение имеет свой уникальный порядковый номер, и индексируются на отдачу только последние (например) 10, т.е. при постинге нового сообщения, старое летит в историю, а в топ-10 пихается новое.
Далее по условию, любому запросившему (?getmemessage=234323) отдаем все которые больше номером, но не более 10-ти (в нашем случае) сообщений за раз (если чел только зашел, он просит номер ноль). Или, если сообщений моложе нет - не отдаем ничего.
Так можно отказаться и от сессий, и от индентификаторов каналов пользователей.....
Пользователь же с новым запросом всего-лишь шлет последний полученный номер.
(Добавление)
Еще можно добавить тот факт, что если новые сообщения будут добавляться быстрее чем одно в секунду (а запись в БД в принципе можно считать "атомарым" действием, и насколько я знаю - неблокирующим), то у пользователей будет "несрастуха" в полученых сообщениях, во первых из-за одинаковых таймстампов, во вторых из-за упреждающего кеширования на чтение.
С порядковыми номерами такой фокус не пройдет...
|